【问题标题】:Saving and loading control values when switching between different User Controls in C#在 C# 中的不同用户控件之间切换时保存和加载控件值
【发布时间】:2017-05-08 08:09:25
【问题描述】:

我有一个拆分容器。在面板 1 中,我有 7 个工具条按钮,当我单击它们时,它们会在面板 2 中打开一个用户控件。用户控件由用户可以填写的不同文本框组成。代码如下所示:

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 时,仍然需要填写所有内容。

【问题讨论】:

  • 使用 Controls.Clear() 是非常危险的,它不会处理被删除的控件。它们将在应用程序的整个生命周期内导致泄漏。但碰巧它正是你似乎想要的。您必须跟踪它们的引用,这样您就可以避免创建新实例并简单地重复使用现有实例。
  • 用户控件的加载和关闭事件是否可能?或者你怎么看?

标签: c# user-controls


【解决方案1】:

创建所有控件并隐藏所有控件 (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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多