MouseEnter
和MouseLeave
。我需要找到所有按钮并为每个按钮分配不同的MouseEnter
和MouseLeave
。
我在一个按钮上尝试了这个,但它不起作用。
private void createButton_MouseEnter(object sender, EventArgs e)
{
createButton.Cursor = NativeMethods.LoadCustomCursor(Path.Combine(collection.source, collection.cursor_hand));
switch (Name)
{
case "createButton":
this.createButton.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.create_on));
break;
}
}
答案 0 :(得分:8)
您可以使用OfType
扩展方法轻松遍历所有按钮,如下所示:
foreach(var button in this.Controls.OfType<Button>())
{
button.MouseEnter += createButton_MouseEnter;
button.MouseLeave += createButton_MouseEnter;
}
如果您想获得最新信息createButton_MouseEnter
,请在Button's Name
中执行以下操作:
private void createButton_MouseEnter(object sender, EventArgs e)
{
var currentButton = sender as Button;
var name = currentButton.Name;
...
}
答案 1 :(得分:1)
您可以通过以下方式访问winform上的所有按钮:
foreach (var control in this.Controls)
{
if (control.GetType() == typeof(Button))
{
//do stuff with control in form
}
}
在任何事件处理程序后面使用此代码循环遍历winform.Thanks中的所有控件
答案 2 :(得分:0)
我认为这很简单,如果我不明白这个问题,我很抱歉:
if (sender == createButton)
{
createButton.Cursor = NativeMethods.LoadCustomCursor(Path.Combine(collection.source, collection.cursor_hand));
createButton.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.create_on));
}
if (sender == otherButton)
{
//otherCode
}
答案 3 :(得分:0)
您可能应该考虑采用一种递归方法,因为您可能在面板上有一个按钮。
因此,您可以在表单中加载:
foreach(Control control in form.Controls)
{
LoopControls(control);
}
您可以像这样“播放”按钮,因为这是您的情况下的变量 我将为正在寻求类似操作的某人添加一些其他控件的示例
static void LoopControls(Control control)
{
switch(control)
{
case Button button:
if(button.Name.Equals("createButton",StringComparison.Ordinal)
button.BackgroundImage = ((System.Drawing.Image)(Properties.Resources.create_on));
// other stuf if you need to...
break;
case ListView listView:
// other stuf if you need to...
break;
case Label label:
// other stuf if you need to...
break;
case Panel panel:
// other stuf if you need to...
break;
case TabControl tabcontrol:
// other stuf if you need to...
break;
case PropertyGrid propertyGrid:
// other stuf if you need to...
break;
}
foreach(Control child in control.Controls)
LoopControls(child);
}