3

ユーザーがカテゴリを選択でき、そのサブカテゴリが表示されるアプリを作成しようとしています。これらのサブカテゴリは、動的に作成されるボタンです。

現在、ボタンは動的に作成されるため、サブカテゴリがいくつあるかわからないため、button_clickイベントの下にコードを記述する方法がわかりません。

では、特定のボタンのクリックイベントを実行して、特定のコマンドを実行できるようにする方法はありますか?

編集済み

これは私が試したコードです

Button btnDynamicButton = new Button();

private void btnclick_Click(object sender, EventArgs e)
{
label2.Text = btnDynamicButton.Text;
}
private void btnappetizer_Click(object sender, EventArgs e)
{
 groupBox2.Visible =false;
 DataTable dt = new DataTable();
 dt = itemmasterbl.SelectallrecordFromtblItem(btnappetizer.Text);
 for (int i = 0; i < dt.Rows.Count; i++)
 {
  string name = "Appetizer" + DynamicButtonCount;
  Button btnDynamicButton1 = new Button();
  btnDynamicButton1.Name = name;
  btnDynamicButton1.Text = name;
  btnDynamicButton1.Size =
  new System.Drawing.Size(150, 30);
  btnDynamicButton1.Location =
  new System.Drawing.Point(180, DynamicButtonCount * 30);
  btnDynamicButton1.Click +=new EventHandler(btnclick_Click);<br>
  Controls.Add(btnDynamicButton1);
  DynamicButtonCount++;
  btnDynamicButton = btnDynamicButton1;
  }
 }

これを行うと、前菜の下のitemmaster DBの値の数に応じて3つのボタンが作成されますが、3つのボタンのいずれかをクリックすると、ラベルには最後のボタンのテキストのみが表示されます。

btnDynamicButton = btnDynamicButton1;

どちらがボタン情報を持続しますが、どちらのボタンを押しても、ラベルにはそれぞれのテキストが表示されます。どうすればこれを達成できますか。

4

1 に答える 1

5

すべてのロジックを 1 つのハンドラーに入れることができます。

System.Windows.Forms.Button b = new System.Windows.Forms.Button();
b.Click += new EventHandler(b_Click);
//finally insert the button where it needs to be inserted.
...

void b_Click(object sender, EventArgs e)
{
    MessageBox.Show(((System.Windows.Forms.Button)sender).Name + " clicked");
}

あなたの編集に:

ボタンの参照を Field 内に保存していますbtnDynamicButton。したがって、作成した最新のボタンで常に上書きされます。フィールドを使用してボタンを参照しないでください。click-handlerのsenderパラメーターには、クリックされたボタン要素が含まれます。上記のコードを参照してください: に単純にキャストsenderするButtonと、どのボタンがクリックされたかがわかります。

private void btnclick_Click(object sender, EventArgs e)
{
   Button btn = (Button)sender
   label2.Text = btn.Text;
}
于 2013-02-05T10:35:04.293 に答える