4

我的 Winforms 应用程序在数据库中保存和恢复其 GUI 状态。一切正常,除了拆分容器的 SplitterDistance。

该值已从 DB 正确加载和设置,但是当我退出应用程序而不接触拆分器时,我希望它保存相同的值。但它保存了初始值减去 25 个像素。如果我多次打开和关闭应用程序,拆分器距离每次减少 25 像素。

它不是自定义控件,只是一个普通的旧 .NET SplitContainer。仅以编程方式访问该控件以加载其初始 SplitterDistance 并在退出时将其保存,仅此而已。

我该如何解决这个问题?

更新: spl 的FixedPanel属性最初设置为None. 尝试将其设置为Panel1and Panel2; 在这两种情况下,当我保存时,SplitterDistance 都会增长50 像素。

4

4 回答 4

2

下载示例应用程序

        // my splitContainer1 is Horizontal so i used splitContainer1.ClientSize.Height 
        // if you have splitContainer1 is Vertical use splitContainer1.ClientSize.Width
        // without FixedPanel save and load """  
        // loading SplitterDistance from ini file
        int splitContainery = 0;
        splitContainery = (Win32.GetPrivateProfileInt(PluginName, "splitContainer", 0, iniFilePath));
        splitContainer1.SplitterDistance = splitContainer1.ClientSize.Height - splitContainery;

        // saving splitContainer1.SplitterDistance to ini file
        int hhkt = splitContainer1.ClientSize.Height - splitContainer1.SplitterDistance;
        Win32.WritePrivateProfileString(PluginName, "splitContainer", hhkt.ToString(), iniFilePath);
于 2019-01-20T18:41:58.707 回答
1

拆分容器内是否有用户控件,并且可能当它们全部加载时,它会与包含它的用户控件一起调整大小。

要解决此问题,请设置FixedPanel属性并观察它。

于 2012-07-19T19:26:17.327 回答
1

我使用上述响应如下(我的分离器是垂直的):

private void Form1_Load(object sender, EventArgs e) 
{
    int splitContainery = Properties.Settings.Default.SplitterDistance;
    if(splitContainery < splContainer.ClientSize.Width)
        splContainer.SplitterDistance = splContainer.ClientSize.Width - splitContainery;
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    int splitContainery = splContainer.ClientSize.Width - splContainer.SplitterDistance;
    Properties.Settings.Default.SplitterDistance = splitContainery;
    Properties.Settings.Default.Save();            
}

我为 splContainer.SplitterDistance 创建了 PropertyBinding,但没有将它绑定到属性,只是为了将它放在 ApplicationSettings 文件中。

于 2019-08-08T05:43:38.160 回答
-1
int splitContainery = Properties.Settings.Default.SplitterDistance;

例如,如果我可以使用Properties.Settings.Default.SplitterDistance,我将永远无法使用ini文件

于 2019-08-28T02:01:25.653 回答