2013-07-02 2 views
0

나는 B11 (co-ords 1,1)에서 B55 (co-ords 5,5)라는 이름의 picturebox 배열을 가지고 있습니다. 나는이 모든 것을 시작시 (그리고 실행 중)에 숨기려고한다. 수동으로 이름을 배열 할 생각 이었지만 가장 좋은 해결책이 될까요?pictureboxes 배열을 숨기는 가장 빠른 방법

+0

이것은 WinForm 데스크탑 응용 프로그램입니까? –

+0

@DourHighArch 네, 이것은 WinForms입니다. – RX14

답변

1

그들은 모두 같은 패널이나 그룹 상자 (또는 형태)와 같은 공통의 부모 컨트롤을 가지고있는 경우 :

Parent.SuspendLayout() 
For Each pbox As PictureBox in Parent.Controls.OfType(Of PictureBox)() 
    pbox.Visible = False 
Next pbox 
Parent.ResumeLayout() 

다음은 무리를 수정으로 깜박임 방지하는 것입니다) 다시 시작 - 레이아웃 (/ 일시 중지 한 번에 통제.

+1

'Parent'는 그림 상자 만 포함한다고 가정하면'Parent.Visible = false'를 할 수 있습니다. – Kratz

0

당신은에 PictureBox 클래스를 확장하여이 작업을 수행하는 이벤트 처리를 사용할 수 있습니다 : 그림 상자가 표시되거나 숨겨해야하는지 알려 폼에 공용 속성을 추가

  • .
  • 그림 표시/숨기기 대화 상자 속성을 변경할 때 발생하는 폼에 이벤트 추가.
  • 부모 폼의 이벤트를 구독하도록 PictureBox 클래스를 확장합니다.
  • 확장 된 PictureBox 클래스의 visible 속성을 부모 폼의 show/hide 속성으로 설정합니다.

부모 양식에서 표시/숨기기 플래그가 변경되면 모든 그림 상자가 그에 따라 가시성 속성이 변경됩니다.

양식 코드 :

public partial class PictureBoxForm : Form { 
     public PictureBoxForm() { 
      InitializeComponent(); 
      this.pictureBoxesAdd(); 
     } 


     private void pictureBoxesAdd() { 
      MyPictureBox mp1 = new MyPictureBox(); 
      mp1.Location = new Point(1, 1);   
      MyPictureBox mp2 = new MyPictureBox(); 
      mp2.Location = new Point(200, 1); 
      this.Controls.Add(mp1); 
      this.Controls.Add(mp2); 
     } 

     public event EventHandler PictureBoxShowFlagChanged; 

     public bool PictureBoxShowFlag { 
      get { return this.pictureBoxShowFlag; } 
      set { 
       if (this.pictureBoxShowFlag != value) { 
        pictureBoxShowFlag = value; 
        if (this.PictureBoxShowFlagChanged != null) { 
         this.PictureBoxShowFlagChanged(this, new EventArgs()); 
        } 
       } 
      } 
     } 

     private bool pictureBoxShowFlag = true; 

     private void cmdFlip_Click(object sender, EventArgs e) { 
      this.PictureBoxShowFlag = !this.PictureBoxShowFlag; 
     } 
    } 

확장에 PictureBox 번호 :

public class MyPictureBox : PictureBox { 

     public MyPictureBox() : base() { 
      this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 
      this.ParentChanged += new EventHandler(MyPictureBox_ParentChanged); 
     } 

     private void MyPictureBox_ParentChanged(object sender, EventArgs e) { 
      try { 
       PictureBoxForm pbf = (PictureBoxForm)this.Parent; 
       this.Visible = pbf.PictureBoxShowFlag; 
       pbf.PictureBoxShowFlagChanged += new 
        EventHandler(pbf_PictureBoxShowFlagChanged); 
      } catch { } 
    } 

    private void pbf_PictureBoxShowFlagChanged(object sender, EventArgs e) { 
      PictureBoxForm pbf = (PictureBoxForm)sender; 
      this.Visible = pbf.PictureBoxShowFlag; 
    } 
} 
0

... 아니면 그냥이 그들 모두 패널에 '를두고, 패널의 가시성을 변경합니다.

관련 문제