2012-05-14 83 views
0

我有n个图片框。他们应该动态执行以下事件:动态添加事件

private void pictureBoxMouseHover(object sender, EventArgs e) 
{ 
    if (sender is PictureBox) 
    { 
     ((PictureBox)sender).BorderStyle = BorderStyle.FixedSingle; 
    } 
} 

private void pictureBoxMouseLeave(object sender, EventArgs e) 
{ 
    if (sender is PictureBox) 
    { 
     ((PictureBox)sender).BorderStyle = BorderStyle.None; 
    } 
} 

private void MainMaster_Load(object sender, EventArgs e) 
{ 
    foreach (var control in Controls) 
    { 
     if (sender is PictureBox) 
     { 
      PictureBox pb=new PictureBox(); 
      pb.Name = sender.ToString(); 
      pb.MouseHover += new System.EventHandler(this.pictureBoxMouseHover); 
      pb.MouseLeave += new System.EventHandler(this.pictureBoxMouseHover); 
     } 
    } 
} 

我找不到这个问题;请帮帮我。

回答

1

我认为错误是在这里:

foreach (var control in Controls) 
{ 
    if (sender is PictureBox) 

发件人在这种情况下将是窗口。我想你打算控制

foreach (var control in Controls) 
{ 
    if (control is PictureBox) 
2

dbaseman是对的,您在迭代控件时使用了错误的变量。

但是,如果你想这种行为添加到所有图片框的话,最好的解决办法是创建自定义的图片框,并简单地放置在您的形式:

public class MyPictureBox : PictureBox 
{ 
    protected override void OnMouseHover(EventArgs e) 
    { 
     BorderStyle = BorderStyle.FixedSingle; 
     base.OnMouseHover(e); 
    } 

    protected override void OnMouseLeave(EventArgs e) 
    { 
     base.OnMouseLeave(e); 
     BorderStyle = BorderStyle.None; 
    } 
} 

创建这个类,编译应用程序,并拖累这些自定义图片框从工具箱到您的窗体。鼠标悬停在图片框上时,它们都会显示边框。