2016-01-19 36 views
-1

在Winforms應用程序中,我使用從Control派生的自定義控件的窗體。簡化情況如下:在按鈕點擊處理程序中,我將從Controls集合中刪除控件並再次添加它。之後它消失 - 不可見。爲什麼?在刪除並添加控件後,它不可見

private void nextButton_Click(object sender, EventArgs e) 
{ 
    Controls.Remove(_myControl);   
    Controls.Add(_myControl);    
} 

(在現實中,我想刪除這個控制和與其他控制替換它,這是一個測試的情況。)

+1

這現在爲我工作。您可以發佈您爲自定義控件編寫的代碼嗎? –

+0

@ user2946329這是相當大的,我不知道什麼是重要的。它在大型應用程序中運行良好,但有這個奇怪的錯誤。如果您有任何問題,我會發布一部分代碼 – demonplus

+1

您正在更改控件的Z順序,它現在位於底部。因此,不再看到它的一種方式是因爲它現在與另一個控件重疊。繪畫代碼中的錯誤將是另一種解釋。調用Remove()而不是Dispose()是一個永不停止導致問題的嚴重錯誤。請不要讓我們猜測。 –

回答

2

最有可能的情況是,控件確實是按照您的意願添加到父表單中,但是按照與最初插入的位置不同的順序(即列表末尾)。因此,它現在可能部分或全部隱藏在其兄弟控制之一的後面。嘗試添加後添加以下內容:

Controls.Add(_myControl); 
_myControl.BringToFront(); 
0

嘗試重新加入之前添加控制位置:

private void nextButton_Click(object sender, EventArgs e) 
{ 
    Controls.Remove(_myControl);  
    _myControl.Location=new Point(1,1); 
    Controls.Add(_myControl);    
} 
+0

感謝您的建議,但它不起作用 – demonplus

+0

如果_myControl在移除之前是可見的,那麼在執行添加時位置仍然有效 –

相關問題