Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确使用“this”访问表单控件?_C#_.net_Winforms_Events - Fatal编程技术网

C# 如何正确使用“this”访问表单控件?

C# 如何正确使用“this”访问表单控件?,c#,.net,winforms,events,C#,.net,Winforms,Events,在我的例子中,我有面板,但为了清楚起见,我将在我的示例中使用按钮 我有5个或更多的按钮,我将一个事件(例如-onmousehave)设置为5个按钮中的所有按钮。如果所有的事件都链接到一个方法,我如何获取鼠标悬停的按钮 为了捕捉鼠标悬停的按钮,我尝试使用它,但它链接到表单本身 private void buttonX_MouseHover(object sender, EventArgs e) { this.Text = "Test"; } 我希望鼠标悬停

在我的例子中,我有面板,但为了清楚起见,我将在我的示例中使用按钮

我有5个或更多的按钮,我将一个事件(例如-onmousehave)设置为5个按钮中的所有按钮。如果所有的事件都链接到一个方法,我如何获取鼠标悬停的按钮

为了捕捉鼠标悬停的按钮,我尝试使用它,但它链接到表单本身

    private void buttonX_MouseHover(object sender, EventArgs e)
    {
        this.Text = "Test";
    }
我希望鼠标悬停的指定按钮上的文本可以更改其文本以进行测试,但它发生在表单上。仅文本

在我的实际程序中,我有60个面板,我再次对其中任何一个面板上的所有onmousehave事件使用一种方法。在上面的示例中,如何获得鼠标悬停的面板或按钮?

这总是指窗体中的类实例。您需要强制转换发件人:

((Control)sender).Text = "Test";
发送方通常是引发事件的实例—当从多个控件使用同一处理程序时非常有用。

这总是指窗体中的类实例。您需要强制转换发件人:

((Control)sender).Text = "Test";

发送方通常是引发事件的实例—当从多个控件使用同一处理程序时非常有用。

这始终是类,在本例中是表单本身。对象发送者是一个神奇的词。如果它是一个按钮,则将其转换回按钮。由于对象只是一个引用,因此您可以对发送对象进行更改。

这始终是类,在本例中是表单本身。对象发送者是一个神奇的词。如果它是一个按钮,则将其转换回按钮。由于该对象只是一个引用,因此您可以对发送对象进行更改。

谢谢,您救了我一天!我只有一个问题。所有事件中的发送方是否都链接到控件?@John:是的,它总是链接到引发事件的任何实例–对于控件,这就是当前控件。但是,当您自己引发事件时,您需要确保手动传递相应的实例,因为编译器不能保证这一点。我想这就是马克在回答中所说的“一般”的意思。如果执行事件填充,情况也是如此:public event EventHandler SomeEvent{add{innerControl.SomeEvent+=value;}remove{innerControl.SomeEvent-=value;}}-在这里,发送方是内部控件,而不是外部控件。。。要正确处理此事件,您需要使用其他发件人处理并重新引发此事件。谢谢,您救了我一天!我只有一个问题。所有事件中的发送方是否都链接到控件?@John:是的,它总是链接到引发事件的任何实例–对于控件,这就是当前控件。但是,当您自己引发事件时,您需要确保手动传递相应的实例,因为编译器不能保证这一点。我想这就是马克在回答中所说的“一般”的意思。如果执行事件填充,情况也是如此:public event EventHandler SomeEvent{add{innerControl.SomeEvent+=value;}remove{innerControl.SomeEvent-=value;}}-在这里,发送方是内部控件,而不是外部控件。。。要正确处理此事件,您需要使用其他发件人处理并重新引发此事件。