3

UserControlその中にいくつかの内部コントロールを含む があります。このようなもの:

ここに画像の説明を入力

これをプロジェクトで使用すると、他のコントロールと同様に、コントロールのすべてのポイントがクリックされたときに同じクリック イベントが発生します。

しかし、問題は次のとおりです。別のプロジェクトのハンドラーは、ボタン1やラベル1ではなく、背景のどこかをクリックしたときにクリックイベントを処理します。

内部コントロールのすべてのイベントがメイン コントロールの別のイベントを発生させるように設定することで解決できますが、少し奇妙です。

内部コントロールがメイン コントロールのイベントをカバーしないようにするにはどうすればよいですか?

4

2 に答える 2

2

Delphiでこのようなことをしました。トリックは、ラベルを追加するのではなく、イベントで親イベントを呼び出すラベル、ボタンなどのサブクラスを追加することでした。

サブクラスは、Click、Move などをオーバーライドして親を呼び出すだけです。シンプルで、これらがたくさんある場合は時間を大幅に節約できます。

于 2013-02-25T23:18:02.877 に答える
2

s Load イベントを活用してUserControl、プロジェクト内のすべてのサブ コントロールを反復処理し、MouseMoved イベントごとにプログラムでハンドラーを追加することをお勧めします。これは、追加された新しいサブ コントロールを処理するのに十分堅牢です。例えば;

    private void UserControl1_Load(object sender, EventArgs e)
    {
        foreach (Control c in Controls)
        {
            c.MouseMove += Control_Move;
        }
    }

    protected void Control_Move(object sender, MouseEventArgs e)
    {
        // do stuff here
    }

Control_MoveUserControl の MouseMove イベントを同じメソッドにフックすることを忘れないでください。

于 2013-02-25T21:40:49.243 に答える