如何从其中一个事件中引用控件?

Ale*_*psa 0 c# winforms

有没有更简单的方法来获取'panelDown'对象,以便在所有控件中使用相同的代码?


    private void panelDown_MouseHover(object sender, EventArgs e)
    {
        **panelDown**.BorderStyle = BorderStyle.FixedSingle;
    }

Jon*_*eet 5

我没有as按照Nico建议的方式使用,而是投下:

private void panelDown_MouseHover(object sender, EventArgs e)
{
    var panel = (Panel) sender;
    panel.BorderStyle = BorderStyle.FixedSingle;
}
Run Code Online (Sandbox Code Playgroud)

当你无条件地转换时,使用强制转换是可取的,就好像你有错误的类型一样,抛出异常(ClassCastException)比NullReferenceException使用as错误输入的结果时更加清晰.

(你不必须在这里使用两个语句,当然-我只是觉得它更清晰)

as当输入对于不同类型有效时使用,如果它是正确的类型,您将有条件地采取行动.

如果您手动连接事件处理程序,则可以使用lambda表达式捕获相关变量,当然:

foo.MouseHover += (sender, args) => foo.BorderStyle = BorderStyle.FixedSingle;
Run Code Online (Sandbox Code Playgroud)

要么:

foo.MouseHover += delegate { foo.BorderStyle = BorderStyle.FixedSingle };
Run Code Online (Sandbox Code Playgroud)