委托,事件处理程序和控件
本文关键字:控件 程序 事件处理 委托 | 更新日期: 2023-09-27 18:09:58
关于这段代码我有两个问题。
1:
代码中第一种方式和第二种方式的区别是什么?我指的是语法,而不是他们做什么。你更喜欢哪一个?
二:在控件。OfType我们如何获得多个结果,例如TextBox和按钮,这里我只写了TextBox。(Windows格式)
private void Form2_Load(object sender, EventArgs e)
{
foreach (Control item in Controls.OfType<TextBox>())
{
item.MouseEnter += item_MouseEnter; // 1st way
item.MouseLeave += new System.EventHandler(item_MouseLeave); //2nd way
}
}
void item_MouseLeave(object sender, EventArgs e)
{
var senderButton = (Control)sender;
senderButton.Height -= 5;
senderButton.Width -= 5;
}
void item_MouseEnter(object sender, EventArgs e)
{
var senderButton = (Control)sender;
senderButton.Height += 5;
senderButton.Width += 5;
}
1st:没有区别。第一行将隐式地使用EventHandler。
2nd: OfType只接受1个类型参数,因此它将只返回该类型的对象。但是你可以自己过滤。Controls.Where(ctrl => ctrl is TextBox || ctrl is Button)
(这是OfType在内部做的)
Controls.OfType<Control>().Where(ctrl => ctrl is TextBox || ctrl is Button)
(OfType将转换IEnumerable to IEnumerable<Control>
)
或者在循环中使用一个简单的if语句