0

在 .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 像素;-) 这样做没问题,我想要为此使用标签控件。

一旦我向 Cell 添加另一个(例如标签)控件,它就不再可以看到某些事件,因为子事件正在获得“第一权利”。对于 Label 控件覆盖的像素,它将捕获我想用 Cell 控件而不是 Label 控件处理的 Click 事件。

如果它只是我想在 Cell 中使用的一个控件,则解决方案是将事件从 Label 控件链接到 Cell 控件。但是我至少有 10 个不同的(标签)控件需要进入 Cell 以显示我拥有的所有信息。将所有控件的所有事件转发给它的父级对我来说有点麻烦。(除了容易出错和其他错误。)

为用户控件中的子控件禁用事件捕获的正确方法是什么?

如前所述,我曾想过将事件从孩子转发给父母,但现在拒绝了。

然后我想到了不使用控件来显示数据,而是生成一个包含信息的位图并将其用作背景。我……不期待!

最后,我提出了一个想法,即在所有其他控件之上放置一个额外的控件,并将捕获的事件转发给父级。这可能是最简单的继续方式。

不知何故,我认为必须有更好的方法来解决这个问题,但是如何呢?

欢迎任何建议。

4

1 回答 1

0

Implement a label class which inherits from Windows.Forms.Label. In this derived label/component class add a method or mechanism to forward any click event received by the label to the parent Cell control. Any labels which are added as child controls of a Cell would be of this custom label class and would all forward their Click events to the parent without having to manually do so for each label instance.

于 2012-12-28T20:53:19.463 回答