Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c在user.config中存储多个拆分器位置_C#_Visual Studio_Splitter_Settings - Fatal编程技术网

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

C# c在user.config中存储多个拆分器位置,c#,visual-studio,splitter,settings,C#,Visual Studio,Splitter,Settings,在我的winform中有一些拆分器来分隔一些DataGridView,是否有方法将拆分器位置存储并恢复到user.config中 如果可能的话,我希望避免为每个拆分器添加具有不同名称的设置 提前谢谢我想出了一些你可以使用的东西。关于这个例子,有几点: 我使用了SplitContainer,但我想你可以很容易地适应它。 我只扫描表单的控件列表-此方法不会提取您可能需要递归执行的所有SplitContainer。 这假设您有一个名为string类型的SplitterPositions的用户设置。 这

在我的winform中有一些拆分器来分隔一些DataGridView,是否有方法将拆分器位置存储并恢复到user.config中

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


提前谢谢

我想出了一些你可以使用的东西。关于这个例子,有几点:

我使用了SplitContainer,但我想你可以很容易地适应它。 我只扫描表单的控件列表-此方法不会提取您可能需要递归执行的所有SplitContainer。 这假设您有一个名为string类型的SplitterPositions的用户设置。 这没有考虑表单将来的更改,例如重新排列控件、添加新节、删除现有节等,因此在这方面有点脆弱。 我个人建议为您的拆分器或拆分容器指定名称,这取决于您使用的类型,因为这样可以避免我提到的问题

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

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];
    }
}

我想出了一些你可以用的东西。关于这个例子,有几点:

我使用了SplitContainer,但我想你可以很容易地适应它。 我只扫描表单的控件列表-此方法不会提取您可能需要递归执行的所有SplitContainer。 这假设您有一个名为string类型的SplitterPositions的用户设置。 这没有考虑表单将来的更改,例如重新排列控件、添加新节、删除现有节等,因此在这方面有点脆弱。 我个人建议为您的拆分器或拆分容器指定名称,这取决于您使用的类型,因为这样可以避免我提到的问题

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

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];
    }
}

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


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

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

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