这让我疯了。在Visual Studio WinForms设计器中,如果双击一个控件,它将为该控件生成一个XXXX_Load处理程序。这永远不会是你想要的。您希望Click事件或Changed事件或更有可能转到现有的Click事件。你不是一个新的Load事件。更糟糕的是因为偶然发生双击。单击一次,然后再次单击 - bingo一个Load事件处理程序。我使用笔 - 平板电脑组合,双击很容易!
有人能告诉我是否有办法阻止这种情况发生。我想要一个Click处理程序。我会安心,没有任何事情发生。
答案 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。默认情况下,它使用反射来查找默认事件的方法签名。如果它找不到它,它就什么都不做。