【问题标题】:How can I assign same actions to multiple buttons at once?如何一次将相同的操作分配给多个按钮?
【发布时间】:2019-09-14 09:49:51
【问题描述】:

我正在开发一个 WinForms 应用程序,我希望用户在该应用程序中单击一个按钮,然后更改按钮的文本(将 +1 添加到计数器)。我有多个按钮,并且有三个方法 Click MouseDownMouseUp 对于每一个都是非常低效的。

所以我设置了一个类,但不知道如何将它分配给所有按钮。

public class AddButton : Button
    {
        public int Count { get; set; }

        private void Button_Click(object sender, EventArgs e)
        {
            AddButton ab = (AddButton)sender;

            Count++;
            ab.Text = Count + " Added";
        }
    }

也许我也可以将所有按钮的EventHandlers 链接到一个,但我不知道如何从那里开始以及将代码放在哪里。这是Visual Studio项目下载link如果你需要的话。

【问题讨论】:

  • 你试过在构造函数中分配处理程序吗?
  • @Wiktor Zychla 我在哪里可以找到构造函数?
  • 这确实是 3 个问题。 1) 向多个控件添加相同的处理程序是通过在选择所有控件后将处理程序名称粘贴到属性/事件窗格中的事件字段中来完成的。 - 2) 但你也可以像这样在代码中连接事件:control.eventname += handlername。循环执行它,你就设置好了。 - 3) 你的类缺少构造函数。 (至少需要一个无参数的,让设计师开心!)像这样添加一个public AddButton() {};把它放到你的课堂上! .现在您可以通过Click += Button_Click;
  • 当我现在点击一个按钮时,什么也没有发生。如何使单击按钮执行 AddButton 类中的“Button_Click”?
  • 我给你看了;但你没有更新你的代码。

标签: c# winforms class inheritance


【解决方案1】:

你可以试试这个代码:

public class AddButton:Button
{
  public int Count { get; set; } = 0;

  public AddButton()
  {
    // After it's painted, set its text to current Counter
    this.Paint += (s, e) => this.Text = Count.ToString();
    this.Click += (s, e) => this.Text = (++Count).ToString(); 
  }
}

在您的项目中,从以下位置更改按钮初始化就足够了:

Button button1 = new Button();

Button button1 = new AddButton();
// or
AddButton button1 = new AddButton();

【讨论】:

  • 在哪里可以找到初始化表格?是Form1.Designer.cs文件吗?
  • Yes :) 您还可以将光标设置在变量上并查看所有引用(右键单击它或按 Shift + F12 后),然后找到它的装箱位置。
  • Turczyn 我让它工作得很好。除了更改文本之外,我还可以分配第二个功能吗?我试过'this.Click += (s, e) => TotalCount.Text = addButton10.Count + AddButton11.Count',但它说上下文不可用。我应该为此提出一个新问题还是将其保留在 cmets 中?
  • @hjknvcaesdbuihjase 您应该首先搜索解决方案,该解决方案可能已经出现在此站点上。如果您找不到答案,请发布问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 2012-03-05
相关资源
最近更新 更多