C# 获取事件的控件名
在我的C#Windows窗体中,我有一些动态生成的按钮。我在单击事件上指定了以下方法。是否可以获取触发事件的按钮的名称C# 获取事件的控件名,c#,winforms,event-handling,C#,Winforms,Event Handling,在我的C#Windows窗体中,我有一些动态生成的按钮。我在单击事件上指定了以下方法。是否可以获取触发事件的按钮的名称 private void btnBrowsDoc_Click(object sender, EventArgs e) { try { if (openFileDialog1.ShowDialog().Equals(DialogResult.OK)) { gbxDocument.Controls["txtDo
private void btnBrowsDoc_Click(object sender, EventArgs e)
{
try
{
if (openFileDialog1.ShowDialog().Equals(DialogResult.OK))
{
gbxDocument.Controls["txtDocument" + count].Text =
openFileDialog1.FileName;
}
else
{
return;
}
}
catch (Exception ex)
{
//handle the exception
}
}
您可以使用
sender
参数。这就是引发单击事件的控件(本例中的按钮):
var button = (Button)sender;
button.Name ...
注意:如果您向同一事件处理程序订阅了其他控件(如面板等),则可以使用as
操作符检查发送者是否是按钮:
var button = sender as Button;
if (button != null)
{
button.Name ...
...
}
“对象发送器”
”的第一个参数包含引发/触发事件的对象/控件的引用
var button = sender as Button;
为什么
要尝试…捕获?-这通常是一种相当糟糕的编程风格,尤其是当您不计算捕获的异常时。@Uwe Keim:am使用文本文件处理异常。。。我只是在这里添加时删除了那行代码……在N.B.部分,我认为最好检查'is'参数,然后执行操作。否则,无法再次强制转换发件人。e、 如果(发送者是按钮)返回(发送者是按钮)。名称;else if(发送方为面板)返回(发送方为面板)。名称;大卫·法利:这真的取决于你需要什么。如果您只需要检查是否是一个按钮,我会坚持使用作为
,但这是一个偏好问题