有没有办法阻止WinForms设计器默认控制Load事件

时间:2015-05-15 18:39:04

标签: c# winforms visual-studio

这让我疯了。在Visual Studio WinForms设计器中,如果双击一个控件,它将为该控件生成一个XXXX_Load处理程序。这永远不会是你想要的。您希望Click事件或Changed事件或更有可能转到现有的Click事件。你不是一个新的Load事件。更糟糕的是因为偶然发生双击。单击一次,然后再次单击 - bingo一个Load事件处理程序。我使用笔 - 平板电脑组合,双击很容易!

有人能告诉我是否有办法阻止这种情况发生。我想要一个Click处理程序。我会安心,没有任何事情发生。

2 个答案:

答案 0 :(得分:5)

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

  

指定组件的默认事件。

public static void readWrite(File file) throws IOException{
    RandomAccessFile raf = new RandomAccessFile(file, "rw");

    String newLine = System.getProperty("line.separator");

    String line = null;
    int write_pos = 0;
    while((line = raf.readLine()) != null){
        line = line.replaceAll("\\s+", " ") + newLine;
        byte[] bytes = line.getBytes();
        long read_pos = raf.getFilePointer();
        raf.seek(write_pos);
        raf.write(bytes, 0, bytes.length);
        write_pos += bytes.length;
        raf.seek(read_pos);
    }
    raf.setLength(write_pos);
    raf.close();
}

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

答案 1 :(得分:2)

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

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

}

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