如何预测winforms中的所有按钮(C#)

时间:2014-01-26 10:01:08

标签: c# winforms button case

你能帮助我吗?我在winforms.designer.cs中有所有按钮,我为所有按钮分配了相同的处理程序。处理程序为MouseEnterMouseLeave。我需要找到所有按钮并为每个按钮分配不同的MouseEnterMouseLeave

我在一个按钮上尝试了这个,但它不起作用。

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;
    }
}

4 个答案:

答案 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);
}