2017-05-08 8 views
0

スプリットコンテナがあります。 Panel 1には7つのツールストリップボタンがあり、それらをクリックするとPanel 2のUser Controlが開きます。 。ユーザーコントロールは、ユーザーが入力することができます別のテキストボックスで構成されたコードは次のようになります。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

)は、それが削除されているコントロールを配置しない、*非常に*危険です。彼らはアプリの生涯のためにリークを引き起こすでしょう。しかし、それはまさにあなたが望むように見える*まさに*起こります。新しいインスタンスの作成を避け、既存のインスタンスを再利用できるように、参照を追跡する必要があります。 –

+0

ユーザーコントロールのロードとクローズイベントで可能ですか?あなたはどうやってそれを見ますか? – user3415824

答えて

0

すべてのコントロールを作成し、すべてを非表示にしますそれらの(Visible=false)。次にクリックイベントでは、適切なコントロールのためにVisible=trueと設定します。

例:Controls.Clearを(使用

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); 
    } 
} 
関連する問題