【问题标题】:Using event from button 1 in button 2在按钮 2 中使用按钮 1 的事件
【发布时间】:2011-11-03 08:32:17
【问题描述】:

我有 2 个按钮。我正在尝试将按钮 1 中的事件用于按钮 2,所以它们都做同样的事情。
因此,通过单击 2,按钮 1 也会被单击。我实际上是从菜单条项中执行此操作的,但我想它具有相同的原理。我只是不想有重复的代码。我认为 button1.Click() 会起作用,但显然没有。我怎么能这样做?

简化示例:

private void button1_Click(object sender, EventArgs e)
{
    count += 1;
    label1.Text = Convert.ToString(count);
}
private void button2_Click(object sender, EventArgs e)
{
    count += 1;
    label1.Text = Convert.ToString(count);
}

-- 编辑--

我正在使用一个类图,它没有显示任何可以/应该执行此操作的其他方法。需要坚持类图。

【问题讨论】:

  • 如果你创建一个function()并使用它有什么问题
  • 这是 WinForms 还是 WPF?

标签: c# events button


【解决方案1】:

你有几个选择。

  1. 将两个事件中的代码放入自己的方法中并调用它。
  2. 创建一个 _click 方法并将其设置为两个按钮的事件处理程序。
  3. 您可以从button1_click 拨打button2_Click (我建议不要这样做)

1

private IncrementAndDisplay()
{
    count += 1;
    label1.Text = Convert.ToString(count);
}
private void button1_Click(object sender, EventArgs e)
{
    IncrementAndDisplay();
}
private void button2_Click(object sender, EventArgs e)
{
    IncrementAndDisplay();
}

2

// Change both button's clicked events to use this method in the IDE, or in code.
private void button_Click(object sender, EventArgs e)
{
    count += 1;
    label1.Text = Convert.ToString(count);
}

3

private void button1_Click(object sender, EventArgs e)
{
    button2_Click(sender, e); // Bad!
}
private void button2_Click(object sender, EventArgs e)
{
    count += 1;
    label1.Text = Convert.ToString(count);
}

【讨论】:

  • 我刚刚编辑了我的 OP,说我没有看到任何应该存在的额外方法。为什么你的第三个选项不好?
  • 然后选择选项 2。选项 3 不好,因为如果 button1_Clickbutton2_Click 相距甚远,而您查看 button1_click 则根本不明显发生了什么。鉴于这是homework,我相信他们正在寻找你做#2。
  • 我不完全理解数字 2 的工作原理。我必须有一个名为 btnEnter 和其他 tsmiEnter 的按钮。不能使用相同的名称。
  • 您不需要使用相同的名称。方法 button1_Click 的名称可以是任何名称。在表单设计器中,单击您的按钮。然后单击属性中的事件部分。在那里,找到Click 事件。您会看到 button1_click 和 button2_click 都是可选择的。
  • 如果您在表单设计器中选择了按钮,请查看属性面板(默认为右下角)。寻找一个看起来像闪电的图标。然后,您将获得按钮的所有可用事件的列表。找到Click 一个。
【解决方案2】:

无论 button1 放入一个单独的方法,并从两个按钮调用该方法, 最好将代码分开,然后不要重复任何内容。

您提供的内容在不应该存在的按钮之间创建了不自然的依赖关系。

关于你的类图,如果它是私有方法,那应该没关系。

【讨论】:

  • 这正是我遇到这个问题的原因。第二个按钮是菜单条中的一个按钮,正如我被要求做的那样,它必须输入提供的信息。我只是通过调用按钮 1 就足够了。
  • 评分的人在评分时是*******。
  • 然后像@George Duckett 提供的那样,更改代码以使两个按钮调用相同的“单击”方法。 (选项 2)。也许您应该与您的评分员确认添加私有方法是否重要。通常不会。
【解决方案3】:

您应该使用单独的函数/方法来处理操作,然后让两个按钮处理程序调用该函数:

private void button1_Click(object sender, EventArgs e)
{
    doTheThing();
}
private void button2_Click(object sender, EventArgs e)
{
   doTheThing();
}

private void doTheThing()
{
    count += 1;
    label1.Text = Convert.ToString(count);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多