在.NET v4上使用VS2010我遇到以下问题。
我创建了两个自定义控件,Cell和Board,我想使用Cell控件捕获大量事件并显示一些数据。我需要捕获的最重要事件是Click事件。
当自定义控件没有子控件时,这不是问题。 在使用Cell的级别,我可以将事件处理程序绑定到Click事件,没有问题。
public partial class Cell : UserControl
{
....
}
public partial class Board : UserControl
{
private void InitializeComponent()
{
...
this.Cell99.Click += new System.EventHandler(this.Cell_Click);
...
}
}
Cell控件相当小(大小约为50x50像素),我希望它显示的一个是尽可能大的整数值(大小约为50 x 50像素;-)这样做没有问题,我想使用Label控件。
一旦我向Cell添加另一个(例如Label)控件,它就不再能看到一些事件,因为子事件正在获得“第一权利”。对于Label控件所覆盖的像素,它将捕获我想要使用Cell控件处理的Click事件,而不是Label控件。
如果我只想在Cell中使用一个控件,那么解决方案就是将事件从Label控件链接到Cell控件。但我至少有10个不同的(标签)控件需要进入Cell才能显示我拥有的所有信息。将所有控件的所有事件转发给它的父母看起来对我来说有点麻烦。 (除了容易出错和其他错误。)
在用户控件中禁用子控件的事件捕获的适当方法是什么?
如上所述我曾想过将事件从孩子转移到父母但暂时拒绝了。
然后我想到不使用控件来显示数据,而是生成包含其中信息的位图并将其用作背景。我......并不期待 !
最后,我想到了将一个额外的控制放在所有其他控制之上,然后将它捕获的事件转发给父母。这可能是最简单的继续方式。
不知怎的,我必须有一个更好的方法来解决这个问题但是如何?
欢迎任何建议。
答案 0 :(得分:0)
实现一个继承自Windows.Forms.Label的标签类。在此派生标签/组件类中,添加一种方法或机制,以将标签接收的任何单击事件转发到父Cell控件。添加为Cell的子控件的任何标签都属于此自定义标签类,并且都会将其Click事件转发给父级,而无需为每个标签实例手动执行此操作。