2010-09-29 118 views
3

我有一個由幾個splitcontainer分隔的屏幕。其中一個包含我製作的用戶組件的矩形,這些「矩形」代表醫院病牀。我想要做的是給用戶在這個「用戶組件視圖」和「數據網格視圖」之間切換的選項。C#隱藏並顯示在分離容器頂部的面板

所以我創建了一個面板pnlPatients,我給出了與用戶組件相同的splitcontainer大小。當用戶選擇「更改視圖」時,程序應該在兩種佈局之間切換。

代碼: 嘗試1:

if (pnlPatients.Visible) 
    pnlPatients.Hide(); 
else 
{ 
    pnlPatients.Show(); 
    pnlPatients.BringToFront(); 
} 

嘗試2:

pnlPatients.Visible = !pnlPatients.Visible; 
pnlPatients.Invalidate(); 

奇怪的是,這兩個嘗試這樣的工作:

用戶首先看到「用戶組件視圖」。 如果他將切換視圖,它會正確顯示在上一個視圖頂部的面板。 如果他再次切換,那麼面板將被正確隱藏。 如果他再次切換視圖,那麼面板將不會顯示。請注意:在調試時,面板的可見屬性正確更改爲TRUE或FALSE。但出於某種原因,只有第一次將其顯示爲TRUE時才能看到面板。

有沒有人有想法?

問候

編輯:我也試過,但沒有更迭:

pnlPatients.Visible = !pnlPatients.Visible; 
if (pnlPatients.Visible) 
{ 
    pnlPatients.BringToFront(); 
} 
else 
{ 
    pnlPatients.SendToBack(); 
} 
+0

什麼是兩個面板的家長? – 2010-09-29 08:25:56

+0

基本的Windows窗體是父窗體。 – Starceaker 2010-09-29 08:32:31

回答

2

看一看this

+0

這似乎是在做伎倆。通過使用Panel1Collapsed和Panel2Collapsed布爾值。謝謝! – Starceaker 2010-09-29 10:12:29

0

而是無效的面板控制的,無效的主機的形式,迫使它重新繪製它的所有孩子以及通過調用this.Invalidate(true);

+0

我會在一秒鐘之內嘗試,我現在嘗試添加一個額外的splitcontainer,以查看我是否可以隱藏或顯示這些內容。以下託尼提供的鏈接。如果這不起作用,我會嘗試一下,謝謝。 – Starceaker 2010-09-29 09:54:41

5

萬一有人不希望通過所有託尼的鏈接來趟:

this.splitContainer.Panel2.Hide(); 
this.splitContainer.Panel2Collapsed = true; 
+0

我認爲隱藏Panel2是沒有必要的。儘管我沒有測試過,但摺疊應該足夠了。 – 2013-11-04 08:18:53

3
int control = 0; 

    private void hideShowLogToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (control == 0) 
     { 
      control = 1; 

      splitContainer1.Panel2Collapsed = false; 

      splitContainer1.Panel1Collapsed = true; 

     } 
     else if (control == 1) 
     { 
      control = 0; 

      splitContainer1.Panel2Collapsed = true; 

      splitContainer1.Panel1Collapsed = false; 
     } 
    } 
0
bool state; 
    private void btn_Click(object sender, EventArgs e) 
    { 
     if (state) 
     { 
      splitContainer1.Panel1Collapsed = true; 
      splitContainer1.Panel2Collapsed = false; 
      state = false; 

     } 
     else 
     { 
      splitContainer1.Panel1Collapsed = false; 
      splitContainer1.Panel2Collapsed = true; 
      state = true; 

     } 

    }