2017-05-08 38 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); 
    } 
} 
相关问题