2012-05-14 13 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; 
    } 
} 

アプリとドラッグをコンパイルし、このクラスを作成します。これらのカスタム写真ボックスは、ツールボックスからフォームに表示されます。マウスが画像ボックスの上にマウスを置くと、それらはすべて境界線を表示します。

関連する問題