点击了哪个控件?

时间:2011-12-20 16:29:14

标签: c# winforms

我的WinForm C#应用程序上的MouseEvents存在问题。我希望鼠标点击我的应用程序。 如何确定点击了哪个控件?(我是初学C#)

6 个答案:

答案 0 :(得分:5)

试试这个:

private void Control_Clicks(object sender, EventArgs e)
{
    Control control = (Control)sender;   // Sender gives you which control is clicked.
    MessageBox.Show(control.Name.ToString());
}

Thisthisthis可能有所帮助。

希望它有所帮助。

答案 1 :(得分:1)

    private void Form1_Load(object sender, EventArgs e)
    {
        SetupClickEvents(this);
    }

    /// <summary>
    /// This will loop through each control within the container and add a click handler to it
    /// </summary>
    /// <param name="container">The container whose children to handle clicks for</param>
    private void SetupClickEvents(Control container)
    {
        foreach(Control control in container.Controls)
        {
            control.Click += HandleClicks;
        }
    }
    private void HandleClicks(object sender, EventArgs e)
    {
        Control control = (Control)sender;
        MessageBox.Show(string.Format("{0} was clicked!", control.Name));
    }

答案 2 :(得分:0)

如果您正在使用Windows窗体,则有几种选择:

  1. Hook mouse event,并确定点击的组件是否真正成为您的应用程序的一部分

  2. 您可以声明基类MyComponent : Control。该组件会覆盖MousClick事件并提出special event通知事实。您应用中的每个控件都来自该控件,因此每个控件都会通知其上发生的点击。这足以订阅 他们按照要求处理事件并处理它们。

  3. 只是几个想法......

答案 3 :(得分:0)

您必须将它们连接到同一个事件处理程序。这可以在相关控件的属性窗口中完成。您还可以编写自己的函数来遍历控制树,并将函数绑定到每个事件处理程序。

您可以使用foreach循环递归遍历Form.Controls集合。

void attachGlobalHandler(Control aToParse, EventHandler aGlobalHandler)
{
    foreach(Control lControl in aToParse.Controls)
    {
        attachGlobalHandler(lControl, aGlobalHandler);
        lControl.Click += aGlobalHandler;
    }
}

然后你在表单上调用它,并使用你要调用的函数的名称:

attachGlobalHandler( Form1, myClickHandler );

这应该将它绑定到表单上的每个可点击控件。然后,处理程序的sender参数应始终引用触发事件的控件。话虽这么说,我可能只是附加单独的事件处理程序,除非你需要将多个控件作为一个组来处理。

警告:上述代码未经测试。

答案 4 :(得分:0)

第二个问题是“如何确定点击了哪个控件?”每个控件都有可以用代码处理的事件。

知道何时单击控件的最简单方法是附加到控件的单击事件,该事件是从控件的属性完成的。您可能必须单击闪电图标才能查看事件。双击偶数旁边将创建一个空的处理程序。

例如,如果您有一个带有单个按钮的简单表单,则将单击事件附加到表单和按钮将告诉您何时在任何地方发生单击。在大多数情况下,按钮单击将是最有用的。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Click(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {

    }
}

答案 5 :(得分:0)

这很简单!

在Win-Form中的点击事件中,添加

// Here is a modified version of your code:
private void Form1_Click(object sender, EventArgs e)
{
    var control = Form1.ActiveControl;
}