-2

私はパネルを持っており、そのパネルにはpictureBoxとラベルがあります。私がやろうとしているのは、ラベルまたはpictureBoxをクリックすると、送信者がパネルであるというイベントが表示されることです。コード例:

Panel panel1 = new Panel();
Label label1 = new Label();
PictureBox pb = new PictureBox();
panel1.Size = new Size(500,500);
this.Controls.Add(panel1);
label1.Text = "Some text";
panel1.Controls.Add(label1);
pb.Image = somePath;
panel1.Controls.add(pb);
panel1.Click += onClick;
label1.Click += onClick;
pb.Click += onClick;

パネルとすべてがループで追加されます。

private void onClick(object sender, EventArgs e)
{
    if(sender == panel1)
    {
        //do something
    }
}

これがイベントメソッドです。

4

3 に答える 3

1

MSDNのisキーワードについて読む: is演算子は、オブジェクトの実行時の型が特定の型と互換性があるかどうかを確認するために使用されます。

次のようにして、送信者コントロールがパネルであるかどうかを確認する必要があります....

   if(sender is Panel )

また

  if(sender.GetType() == typeof(Panel)) 
  {
             //do something     
  } 
于 2012-05-25T07:03:17.537 に答える
1

私がやろうとしているのは、ラベルまたはpictureBoxをクリックすると、送信者がパネルであるというイベントが表示されることです。

それが何であるかsenderは、イベントを呼び出しているコード次第です。実際に呼び出しているのがパネルでない場合、そのように表示される可能性は低いです。場合によっては (ボタンなど)、イベントを直接呼び出すメソッドが公開されていますが、ここでは公開されていません。率直に言って、あなたの最良の選択肢は次のとおりだと思います。

panel1.Click += onClick;
label1.Click += (sender,args) => onClick(panel1,args);
pb.Click += (sender,args) => onClick(panel1,args);

つまり、送信者になりすまして手動で転送します。

.Tagさらに良いアプローチは、単一のハンドラー内で切り替えるのではなく、 で何かを行うか、異なる動作に対して異なるハンドラーを使用することです。

于 2012-05-25T07:07:57.060 に答える
0

使用する

if(sender is Panel) 
{
    //Do Something     
} 
else if (sender is Label)
{
    //Do something
}
else if (sender is PictureBox)
{
    //Do somethin
}
于 2012-05-25T07:09:00.350 に答える