2011-01-29 80 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