【问题标题】:Is there a way to stop the WinForms designer defaulting to control Load event有没有办法阻止 WinForms 设计器默认控制 Load 事件
【发布时间】:2015-05-15 18:39:03
【问题描述】:

这让我发疯。在 Visual Studio WinForms 设计器中,如果您双击一个控件,它将为该控件生成一个 XXXX_Load 处理程序。这永远不是你想要的。您希望 Click 事件或 Changed 事件或更可能转到现有的 Click 事件。你不是一个新的 Load 事件。更糟糕的是,双击可能会意外发生。您单击一次,然后再次单击 - 宾果游戏加载事件处理程序。我用的是数位板组合,双击很简单!

谁能告诉我是否有办法阻止这种情况发生。我想要一个 Click 处理程序。我会安于现状。

【问题讨论】:

  • 我没有得到这个问题。 VS 创建 _Load 事件处理程序的唯一时间是我双击表单时。否则,我得到的事件取决于我双击哪个控件。自从 VS2003 以及 c# 和 VB 以来,这对我来说都是正确的。
  • 只需按 Ctrl+Z 并单击是。

标签: c# winforms visual-studio


【解决方案1】:

实现此目的的一种方法是继承控件并修改DefaultEventAttribute

指定组件的默认事件。

[DefaultEvent("Click")]
public class MyRadionButton : RadionButton {
}

但是,当您覆盖控件时,可能需要做一些小心/额外的工作。使用这种方法时需要牢记这一点。

【讨论】:

  • 现在这是一个很好的答案,因为我使用的很多控件都是我自己的——这可能是我看到这么多 _Load 事件的原因。
  • 是的,如果您有自己的控件,那就可以了。
【解决方案2】:

除了 Mehrzad 的回答之外,您还可以通过将空字符串传递给 DefaultEvent 属性来完全禁用它:

[DefaultEvent("")]
public class MyCustomControl : UserControl
{

}

这是因为默认控件设计器在双击控件时使用ComponentDesigner.DoDefaultAction。默认情况下,这使用反射来查找默认事件的方法签名。如果它找不到它,它什么也不做。

【讨论】:

  • 完全不包含属性怎么办?在这种情况下它有什么作用吗?
  • 是的,它使用其父级的默认事件处理程序,如果它没有被覆盖(如按钮),则为 Load 事件。
  • 很高兴知道,谢谢。所以,默认的默认是Load :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2020-11-03
相关资源
最近更新 更多