我有一个面板,在该面板上有一个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
}
}
这是事件方法。
答案 0 :(得分:1)
Read about is keyword on MSDN:是运算符用于检查对象的运行时类型是否与给定类型兼容。
您需要检查发件人控件是否为面板,而不是通过执行以下操作来执行此操作....
if(sender is Panel )
或
if(sender.GetType() == typeof(Panel))
{
//do something
}
答案 1 :(得分:1)
我要做的是当我点击标签或pictureBox时,事件将显示发件人是面板。
sender
的内容完全取决于调用事件的代码。如果它不是实际调用它的面板,那么它不可能如此呈现。在某些情况下(按钮等),有一个方法被暴露,导致事件被直接调用,但不是在这里。坦率地说,我认为你最好的选择可能是:
panel1.Click += onClick;
label1.Click += (sender,args) => onClick(panel1,args);
pb.Click += (sender,args) => onClick(panel1,args);
即。手动转发,欺骗发件人。
更好的方法可能是使用.Tag
做一些事情,或者只是为不同的行为设置不同的处理程序,而不是在单个处理程序内部进行切换。
答案 2 :(得分:0)
使用
if(sender is Panel)
{
//Do Something
}
else if (sender is Label)
{
//Do something
}
else if (sender is PictureBox)
{
//Do somethin
}