0

在我的 winform 中有一些拆分器来分隔一些数据网格视图,有没有办法将拆分器位置存储(和恢复)到 user.config 中?

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

提前致谢

4

2 回答 2

3

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

  • 我用过SplitContainer,但我想你可以很容易地适应它。
  • 我只扫描表单的控件列表 - 此方法不会全部获取SplitContainer(您可能需要递归执行此操作)。
  • 这假设您有一个名为 SplitterPositions 类型的用户设置string
  • 这没有考虑到表单的未来变化(即重新排列控件、添加新部分、删除现有部分等),因此在这方面它有点脆弱。

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

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

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];
    }
}
于 2013-07-13T08:58:15.857 回答
1

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

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

于 2013-09-17T07:03:14.790 回答