0

.NET v4 で VS2010 を使用すると、次の問題が発生します。

セルとボードの 2 つのカスタム コントロールを作成しました。セル コントロールを使用して、多数のイベントをキャプチャし、データを表示したいと考えています。キャプチャする必要がある最も重要なイベントは、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);
            ...
        }
    }

セル コントロールはかなり小さく (サイズが約 50x50 ピクセル)、表示したいものの 1 つは、できるだけ大きな整数値です (サイズが約 50 x 50 ピクセル ;-) 問題ありません。そのために Label コントロールを使用します。

別の (ラベルなど) コントロールをセルに追加するとすぐに、子イベントが「最初の権利」を取得しているため、一部のイベントが表示されなくなります。Label コントロールでカバーされるピクセルについては、Label コントロールではなく Cell コントロールで処理したい Click イベントをキャプチャします。

Cell で使用したいコントロールが 1 つだけの場合、解決策は、イベントを Label コントロールから Cell コントロールにリンクすることです。しかし、持っているすべての情報を表示するためにセルに移動する必要がある少なくとも 10 の異なる (ラベル) コントロールがあります。すべてのコントロールのすべてのイベントをその親に転送するのは、ちょっと面倒に思えます。(エラーやその他のバグが発生しやすい場合を除きます。)

ユーザー コントロールの子コントロールのイベント キャプチャを無効にする適切な方法は何ですか?

前述のように、イベントを子から親に転送することを考えましたが、今のところ拒否しました。

次に、コントロールを使用してデータを表示するのではなく、情報を含むビットマップを生成し、それを背景として使用することを考えました。私は...それを楽しみにしていませ

最後に、他のすべてのコントロールの上に追加のコントロールを 1 つ配置し、それがキャプチャしたイベントを親に転送するというアイデアを思いつきました。それが継続するための最も簡単な方法かもしれません。

どういうわけか、この問題に取り組むためのより良い方法があるに違いないと思いますが、どうすればよいでしょうか?

どんなアドバイスでも大歓迎です。

4

1 に答える 1

0

Windows.Forms.Label を継承するラベル クラスを実装します。この派生ラベル/コンポーネント クラスに、ラベルが受け取ったクリック イベントを親セル コントロールに転送するメソッドまたはメカニズムを追加します。Cell の子コントロールとして追加されたラベルはすべて、このカスタム ラベル クラスであり、ラベル インスタンスごとに手動で行う必要なく、すべての Click イベントを親に転送します。

于 2012-12-28T20:53:19.463 に答える