首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TextBoxButton点击事件

TextBoxButton点击事件
EN

Stack Overflow用户
提问于 2017-06-21 00:54:25
回答 3查看 96关注 0票数 0

我使用流代码来创建TextBoxButton控件。当我在主类的“TextBoxButton_Click”void中编写代码时,它工作得很好。但是,当我在窗体上拖动此自定义控件时,如何管理双击此控件时的单击事件?如何确定用户点击了文本框内的文本框或按钮?

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CustomControl
{
    public class TextBoxButton : TextBox
    {
        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);

        public Button mbutton;
        public Button button
        {
            get { return mbutton; }
            set { this.mbutton = value; }
        }
        protected override void OnCreateControl()
        {
            this.Controls.Add(this.mbutton);
            SetRightToLeft();
            base.OnCreateControl();
        }
        private void SetRightToLeft()
        {
            if (RightToLeft == RightToLeft.Yes)
            {
                mbutton.Dock = DockStyle.Left;
            }
            else
            {
                mbutton.Dock = DockStyle.Right;
            }
        }
        protected override void OnRightToLeftChanged(EventArgs e)
        {
            SetRightToLeft();
            base.OnRightToLeftChanged(e);
        }
        public TextBoxButton()
        {
            mbutton = new Button();
            mbutton.Width = 20;
            mbutton.Cursor = Cursors.Hand;
            mbutton.Click += TextBoxButton_Click;
            // Send EM_SETMARGINS to prevent text from disappearing underneath the button
            SendMessage(Handle, 0xd3, (IntPtr)2, (IntPtr)(mbutton.Width << 16));

        }

        private void TextBoxButton_Click(object sender, EventArgs e)
        {
                      }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-21 01:17:46

您可以在自定义控件中创建新事件,在将控件放到窗体上后可以访问这些事件。

代码语言:javascript
复制
public EventHandler TextBoxClick;
public EventHandler ButtonClick;

// Attach this handler to your TextBox.Click event
private void TextBox_Click(object sender, EventArgs e)
{
    if (TextBoxClick != null)
        TextBoxClick(sender, e);
}

// Attach this handler to your Button.Click event
private void Button_Click(object sender, EventArgs e)
{
    if (ButtonClick != null)
        ButtonClick(sender, e);
}

另一种方法是让你的TextBox和按钮成为public,但这看起来有点花招。

票数 0
EN

Stack Overflow用户

发布于 2017-06-21 01:17:33

如果希望Windows窗体设计器在程序员双击窗体设计器中的TextBoxButton时默认情况下为控件创建Click事件,请使用DefaultEvent属性。

下面的代码还演示了如何创建您自己的Click事件,该事件在单击按钮时引发。

代码语言:javascript
复制
[DefaultEvent("Click")]
public class TextBoxButton : TextBox
{
    public TextBoxButton()
    {
        mbutton = new Button();
        mbutton.Width = 20;
        mbutton.Cursor = Cursors.Hand;
        mbutton.Click += TextBoxButton_Click;
        // Send EM_SETMARGINS to prevent text from disappearing underneath the button
        SendMessage(Handle, 0xd3, (IntPtr)2, (IntPtr)(mbutton.Width << 16));
    }

    private void TextBoxButton_Click(object sender, EventArgs e)
    {
        //  Raise our own Click event
        OnClick();
    }

    public event EventHandler Click;

    protected void OnClick() {
        var handler = Click;
        if (handler != null)
        {
            handler(this, EventArgs.Empty);
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2017-06-21 01:18:49

不如在构造函数中添加一个事件处理程序:

代码语言:javascript
复制
public TextBoxButton(){
//...
//...
 mbutton.Click += Mbutton_Click;
}

private void Mbutton_Click(object sender, EventArgs e) {
    MessageBox.Show("StackOverFlow");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44658965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档