我正在编写一个C#程序,它接受一堆参数并对数据点进行一些转换,然后将它们绘制到屏幕上.
在我的一个表单上,我有一堆TextBoxes,我都希望执行相同的KeyPress事件.之前我会做一个switch语句,它只会接收KeyPress事件的发送者并将其与所有TextBox进行比较.这种方法对我来说似乎不太高效,因为现在我有20多个TextBox.
我想要做的是找到表单上的哪个TextBox发送了KeyPress事件,并从该TextBox获取更多信息(IE的Text值等).这样可以省去我不得不与发送者进行大量切换以查看TextBox相同的问题.但我刚刚度过了最艰难的时光.
我查看了System.Windows.Controls和System.Windows.Forms类,看看是否能找到对我有用的东西.我正在寻找的东西可以让我看到哪个控件有焦点.也许这就是我应该寻找的东西?我还看了一下我在KeyPress事件中可以对发件人做些什么来看看我是否能弄清楚TextBox引发了什么并且仍然没有运气.
在这一点上,我觉得我更加困惑自己.任何帮助将非常感激.
Mar*_*ell 10
发件人方法应该没问题.但是,你可以投下:
TextBox txt = (TextBox) sender; // or "as" if you aren't sure.
// you can also just cast to Control for most
// common properties
// perhaps look at txt.Name, txt.Text, or txt.Tag
Run Code Online (Sandbox Code Playgroud)
请注意,有些情况下发件人不是您的想法,但这是罕见的,主要涉及通过以下代码转发事件:
public event EventHandler AcceptClick {
add { acceptButton.Click += value;}
remove { acceptButton.Click -= value;}
}
Run Code Online (Sandbox Code Playgroud)
在这里,sender将是acceptButton,你看不到.但通常这不是问题.
有一个约定,传递给事件处理程序的第一个参数是发送事件的控件,所以你可以像这样抛出它:
void myTextBox_EventHandler(object sender, EventArgs args)
{
TextBox textBox = (TextBox)sender;
...
}
Run Code Online (Sandbox Code Playgroud)