1

私はWindows Form名前を付けました -Form1そして中Form1には という名前のパネルがありpanel1ます。このパネルはbuttons、彼を追加するためだけに使用します。今のところ正確に 9 つありますがbuttons、これが現在の問題と関係がある場合は、それらの数を動的に変更するつもりです。必要なのは、このパネルのボタンがクリックされたときを検出する方法です (他のボタンもありますが、Form1パネルの外側にあります)。また、どのボタンがクリックされたかを正確に知る方法も必要です。私はこれを試しました:

private void panel1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("HI" + sender);
        }

ご覧のとおり、それほど多くはありませんが、pnael1's_clickイベントを使用してそれができないことを確認するには十分でした。このコードを使用すると、ボタン以外のパネル内の任意の場所をクリックすると、メッセージ ボックスが表示されます。では、どうすればそれを行うことができますか。内部からそれを行うことは可能ですか、または別のアプローチを使用してこれらのボタンをグループ化する必要がありますが、現在入っているボタンと他のボタン (実際には持っている) とpanel1の違いを維持できることが重要です)?panel1

4

2 に答える 2

4

動的ボタンを作成するときは、そのボタン インスタンスのClickイベントを登録し、イベント ハンドラーにアタッチします (1 つのハンドラーですべてのボタンのクリック イベントを処理できます)。

var dynamicButton1 = new Button();
dynamicButton1.Click += MyButtonClickHandler;

イベント (つまり、およびを返したり受け取ったりするメソッド) にMyButtonClickHandler適したシグネチャがある限り、ハンドラーは、ボタン インスタンスが存在する限り、動的ボタンのクリック イベントに応答する必要があります。ClickvoidobjectEventArgs

于 2013-01-30T17:08:50.230 に答える
2

時間の経過とともにコントロールを動的に追加せず、フォームが初期化されるとすぐにボタンの数が固定される限り、これを使用して、パネル内のすべてのボタンにクリック イベント ハンドラーを追加できます。

foreach (var button in panel.Controls.OfType<Button>())
{
    button.Click += HandleClick;
}
于 2013-01-30T16:57:48.437 に答える