2013-07-13 64 views
0

在我的winform中有一些拆分器来分离一些datagridviews,有没有办法将拆分器位置存储(并恢复)到user.config中?c#在user.config中存储多个拆分器位置

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

在此先感谢

回答

1

我想出了一些你可能能够使用的东西。关于这个例子的几件事:

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

我个人建议你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]; 
    } 
} 
+0

谢谢@Pwninstein,我会试试! – ghiboz

1

您可以使用该库从文章User Settings Applied到分离器的位置保存到用户设置。

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