c#在user.config中存储多个拆分器位置

时间:2013-07-13 07:59:33

标签: c# visual-studio splitter settings

在我的winform中有一些Splitter来分隔一些datagridviews,有没有办法将分割器位置存储(并恢复)到user.config中?

如果可能的话,我希望避免为每个拆分器添加一个具有不同名称的设置。

提前致谢

2 个答案:

答案 0 :(得分:2)

我想出了一些你可以使用的东西。关于这个例子的一些事情:

  • 我使用SplitContainer,但我想你可以很容易地调整它。
  • 我只扫描表单的控件列表 - 此方法无法获取所有SplitContainer(您可能需要递归执行此操作)。
  • 这假设您有一个名为SplitterPositions的用户设置string
  • 这并未考虑将来对表单的更改(即重新排列控件,添加新部分,删除现有部分等),因此在这方面有点脆弱。

我个人建议为Splitter(或SplitContainer s分配名称,具体取决于您使用的类型),因为这样可以保护您免受我提到的问题的影响。

无论如何,我希望这会有所帮助。

public Form1()
{
    InitializeComponent();

    Closing += Form1_Closing;

    ApplySavedSplitterData();
}

void Form1_Closing(object sender, CancelEventArgs e)
{
    SaveSplitterData();
}

private void SaveSplitterData()
{
    Settings.Default.SplitterPositions = string.Join(";", 
                     Controls.OfType<SplitContainer>()
                             .Select(s => s.SplitterDistance));

    Settings.Default.Save();
}

private void ApplySavedSplitterData()
{
    if (string.IsNullOrEmpty(Settings.Default.SplitterPositions))
    {
        return;
    }

    var positions = Settings.Default.SplitterPositions
                               .Split(';')
                               .Select(int.Parse).ToList();

    var splitContainers = Controls.OfType<SplitContainer>().ToList();

    for (var x = 0; x < positions.Count && x < splitContainers.Count; x++)
    {
        splitContainers[x].SplitterDistance = positions[x];
    }
}

答案 1 :(得分:1)

您可以使用文章User Settings Applied中的库将拆分器位置保存到用户设置中。

此外,您可以保留表单大小/位置和任何自定义表单设置。