【问题标题】:PerformClick() Event Of The Button按钮的 PerformClick() 事件
【发布时间】:2010-02-27 06:52:25
【问题描述】:

我在窗口窗体上有一个按钮,并且我正在调用按钮的 PerformClick() 事件的一种方法。

现在,如果我将此按钮设为 false。则不会执行 PerformClick() 事件。

没事吧?如果是,那么我想让按钮在表单上不可见我该怎么办?我已经使按钮的 背景颜色backcolor 表单相同,但它仍然可见。

如果我使用标签,那么除了更改其可见属性外,还可以使其不可见,只需使其背景色与表单的背景色相同并保持文本为空。还有标签的 click() 事件但我没有找到标签的 PerformClick() 事件。

【问题讨论】:

  • 你能给它的代码吗...
  • -1 我不像其他人那样理解这个问题。请提供so代码。

标签: c# .net winforms button


【解决方案1】:

PerformClick 在引发任何事件之前专门检查按钮是否“可用”。这样您就不必在按钮被禁用、隐藏等情况下添加额外的保护代码。

与其在按钮上调用 PerformClick 方法,不如直接将按钮的 Click 事件处理程序中的代码放入一个方法中,然后从这两个地方调用。

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

private void menu_Click(object sender, EventArgs e) {
    DoSomething();
}

private void DoSomething() {
    MessageBox.Show("Something done!");
}

【讨论】:

  • 因为如果我直接调用我从按钮的 click() 事件中调用的方法,它不会被处理或不被执行..
【解决方案2】:

我不确定我是否理解您的问题,但以下是一些可能(?)给您答案的帖子:

this post (similar question)this post (transparent button)

【讨论】:

    【解决方案3】:

    有两种方法可以有效地使 Button 不可见,但仍然可以调用其 PerformClick() 事件:

    1. 通过更改其 Location 属性,将 Button 移到其所在的 Form 或其他 Container 对象的可见区域之外。

    2. 从 Form 或它所在的其他 Container 对象的 Controls 集合中删除 Button。

    是的,使用这两种技术,您都可以“恢复”按钮:在第一种情况下,通过重新设置 Location 属性;在第二种情况下,通过将 Button 添加回 Form 或其他被移除的 Container 对象(这将恢复 Location)。

    我认为这两种技术都是“可怕”:它们是黑客:乔什·爱因斯坦在上面的回答,我相信会让你走上正轨。

    恕我直言,您需要解释您为什么这么说,作为对 Josh 的建议,您将代码分离为“共享方法”:“因为如果我直接调用我从按钮的 click() 事件中调用的方法,那就是未处理或未执行”

    为什么直接调用方法没有“处理”或“执行”?

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,但我找到了另一种解决方法。 为了帮助这里的其他人:

      您可以使用控件(表单)方法 InvokeOnClick 来强制单击 Visible=False 按钮​​

      this.InvokeOnClick(button1, EventArgs.Empty);
      

      如果你无权访问Form,你可以试试button1.Parent.InvokeOnClick...

      谢谢 (由 Stoitcho Goutsev 发表在其他论坛)

      Raffaeu 提醒我“control.InvokeOnClick 是受保护的方法”

      【讨论】:

      • 这是一个很好的建议,它有效,除了你忘了提到 control.InvokeOnClick 是一个 protected 方法
      【解决方案5】:

      也许我不明白这个问题,但您可以将可见的按钮设置为 false。

      button1.Visible = false;
      

      【讨论】:

      • 如果我将按钮设为 false 则按钮的 performclick() 事件未执行,这就是问题所在。
      猜你喜欢
      • 2011-10-16
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多