0

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

    私人无效panelDown_MouseHover(对象发送者,EventArgs e)
    {
        **panelDown**.BorderStyle = BorderStyle.FixedSingle;
    }

4

3 回答 3

7

而不as是以尼科建议的方式使用,我会投:

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

当您无条件转换时,最好使用强制转换,就好像您输入了错误的类型一样,抛出的异常 ( ClassCastException) 比使用错误输入NullReferenceException的结果时获得 a 更清晰。as

(当然,您不必这里使用两个语句 - 我只是觉得它更清楚。)

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

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

foo.MouseHover += (sender, args) => foo.BorderStyle = BorderStyle.FixedSingle;

或者:

foo.MouseHover += delegate { foo.BorderStyle = BorderStyle.FixedSingle };
于 2012-07-13T08:02:14.130 回答
1
private void panelDown_MouseHover(object sender, EventArgs e)
{
    (sender as Panel).BorderStyle = BorderStyle.FixedSingle;
}
于 2012-07-13T07:59:39.647 回答
1

投射sender到您的控制(可能是面板)。

((Panel) sender).BorderStyle = BorderStyle.FixedSingle;
于 2012-07-13T08:01:29.203 回答