2011-01-29 63 views
1

我在form1一个复选框,当检查它使一个PictureBoxform2可见的,但是当我取消我要刷新form2使得PictureBox是不可见的。此代码在form1。它是一个按钮,打开表单如果没有打开,但如果表单打开,则刷新它。问题是它并不令人耳目一新。谁能告诉我什么是错的?显示/刷新按钮正常

private tuesday _FavoritesForm; 

public void startbutton_Click(object sender, EventArgs e) 
{ 
    if (_FavoritesForm == null) 
    { 
     _FavoritesForm = new tuesday(); 
     _FavoritesForm.Closed += new EventHandler(_FavoritesForm_Closed); 
     _FavoritesForm.Show(); 
    } 
    else 
    { 
     _FavoritesForm.Refresh(); 
    } 

}

+0

*按钮检查形式是开放的,如果它打不开它。这是为了避免一次打开多个表单。然后如果一个表单已经打开,它会刷新它,但它不会重新绘制form2。 – 2011-01-29 18:45:11

回答

2

我会在辅助窗体上添加一个公共方法来显示/隐藏图片,因为它显示第二个窗体不知道第一个窗体。然后在第一个窗体上单击/复选框设置,而不是在第二个窗体上执行“刷新”,如果窗体尚未完成,则创建该窗体。一旦创建,请调用您在辅助表单上公开的任何方法,以根据需要明确或不需要。

编辑澄清

@ a13xy,其实相反......第二种形式没有第一的想法,但肯定的,有一个是公共二号的方法。那么第一个表格上,在您的复选框的点击/值发生变化时,你只需要调用来自......的方法,如示例代码...

public void startbutton_Click(object sender, EventArgs e) 
    { 
     if (_FavoritesForm == null)  
     { _FavoritesForm = new tuesday();   
     _FavoritesForm.Closed += new EventHandler(_FavoritesForm_Closed); 
     _FavoritesForm.Show();  
     }  
     else  
     { _FavoritesForm.Refresh(); 
     } 

     _FavoritesForm.ShowHide(IsCurrentForms.CheckBox.IsCheckedValue); 
    } 

不积极的复选框控件名称,或其经过价值的财产,只是无论你的表格值,并在第二种形式的方法可以是这样的直接调用第二种形式的方法...

public void ShowHide(Boolean ShowTheImage) 
{ 
    // value provided as a direct parameter from the first form, 
    // THISform knows about its own Picture property and can directly 
    // set the visibility within its scoped control. 
    this.YourPicture.Visible = ShowTheImage 
} 
3

在窗体上调用刷新仅仅迫使它重新绘制。没有任何理由认为它会以不同的方式重新绘制。您将不得不以这种形式重写OnPaint()方法。很明显,你没有使用OnPaint来绘制图像,你正在使用一个PictureBox。将该控件的Visible属性设置为false将使图像消失,不需要额外的帮助。

+0

复选框位于form1上,而pictureBox位于form2上。 – 2011-02-01 17:05:01

+0

是的,这就是我在写这个答案时所设想的。 – 2011-02-01 17:23:07