Windows 动态添加事件

Windows 动态添加事件,windows,winforms,events,dynamic,picturebox,Windows,Winforms,Events,Dynamic,Picturebox,我有n个画框。它们应动态执行以下事件: private void pictureBoxMouseHover(object sender, EventArgs e) { if (sender is PictureBox) { ((PictureBox)sender).BorderStyle = BorderStyle.FixedSingle; } } private void pictureBoxMouseLeave(object sender, Eve

我有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);
        }
    }
}

我找不出这有什么不对;请帮帮我。

我想错误在这里:

发送方在这种情况下,将是窗口。我想你是有意控制的

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

我认为错误在于:

发送方在这种情况下,将是窗口。我想你是有意控制的

foreach (var control in Controls)
{
    if (control is PictureBox)
如果是正确的,则在遍历控件时使用了错误的变量

但如果要将此行为添加到所有图片框中,则更好的解决方案是创建自定义图片框,并将其简单地放置在表单上:

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;
    }
}
创建此类,编译应用程序,并将这些自定义图片框从工具箱拖到窗体中。当鼠标悬停在图片框上时,它们都将显示边框。

是正确的,在遍历控件时使用了错误的变量

但如果要将此行为添加到所有图片框中,则更好的解决方案是创建自定义图片框,并将其简单地放置在表单上:

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;
    }
}
创建此类,编译应用程序,并将这些自定义图片框从工具箱拖到窗体中。当鼠标悬停在图片框上时,它们都将显示边框