2017-05-08 29 views
0

我有一個splitcontainer。在面板1中,我有7個工具欄按鈕,當我點擊它們時會在面板2中打開一個用戶控件。 。用戶控制由不同的文本框,用戶可以填寫的代碼如下所示:在C#中的不同用戶控件之間切換時保存並加載控制值。

private void toolStripButtonBaseLayers_Click(object sender, EventArgs e) 
{ 
    splitContainer1.Panel2.Controls.Clear(); 
    BaseLayers BL = new BaseLayers(); 
    splitContainer1.Panel2.Controls.Add(BL); 
} 

private void toolStripButtonSpatialCoverage_Click(object sender, EventArgs e)  
{ 
    splitContainer1.Panel2.Controls.Clear(); 
    SpatialCoverage SC = new SpatialCoverage(); 
    splitContainer1.Panel2.Controls.Add(SC); 
} 

private void toolStripButtonFloodMaps_Click(object sender, EventArgs e) 
{ 
    splitContainer1.Panel2.Controls.Clear(); 
    FloodMaps FM = new FloodMaps(); 
    splitContainer1.Panel2.Controls.Add(FM); 
} 

現在每次我打開與單擊事件的另一用戶控制用戶控制將是空的,因爲我清楚的面板和打開一個新的用戶控制。這不是我想要做的!

我的問題是如何保存你在文本框中填寫的所有內容?以及在它們之間切換時,所有用戶控制值是否仍然可以填充?例如,我填充用戶控件BaseLayers,切換到用戶控件Spatial Coverage和Flood Maps,當我切換回用戶控件BaseLayers時,所有內容都必須填寫。

+0

使用Controls.Clear()是非常* *危險,它並沒有處理被除去的控件。他們會在應用程序的整個生命週期中造成泄漏。但恰巧它恰好是你想要的東西。你將不得不跟蹤他們的參考,所以你可以避免創建一個新的實例,並簡單地重用現有的實例。 –

+0

在用戶控件的加載和關閉事件中是否可能?或者你如何看待它? – user3415824

回答

0

創建所有控件並隱藏所有控件(Visible=false)。然後在Click-Events中設置Visible=true作爲適當的控件。

實施例:

private void toolStripButtonFloodMaps_Click(object sender, EventArgs e) 
{ 
    SetChildVisibleForPanel(typeof(FloodMaps), splitContainer1.Panel2); 
} 

static void SetChildVisibleForPanel(Type visChildType, Panel pnl) 
{ 
    if (pnl.Controls.Count==0) 
    { 
     //Create your controls with Visible=false; 
    } 
    foreach (Control ctl in pnl.Controls) 
    { 
     ctl.Visible = (ctl.GetType() == visChildType); 
    } 
} 
相關問題