My Winforms应用程序在数据库中保存并恢复其GUI状态。除了拆分容器的SplitterDistance外,其他一切都正常。
该值已从DB中正确加载和设置,但当我退出应用程序而未接触拆分器时,我希望它保存相同的值。但它会保存初始值减去25个像素。如果我多次打开和关闭应用程序,拆分器距离每次减少25像素。
它不是一个自定义控件,只是一个普通的旧.NET SplitContainer。该控件只能通过编程方式访问,以加载其初始SplitterDistance并在退出时保存,无需其他操作。
如何解决此问题?
UPDATE:spl的FixedPanel
属性最初设置为None
。尝试将其设置为Panel1
和Panel2
;在这两种情况下,当我保存SplitterDistance时,它都会增长50个像素。
拆分容器中是否有用户控件,当它们全部加载时,它可能会与包含它的用户控件一起调整大小。
要解决此问题,请设置FixedPanel属性并观察它。
下载示例应用程序
// 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);
我使用了以下响应(我的分离器是垂直的):
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文件中。
int splitContainery = Properties.Settings.Default.SplitterDistance;
如果我可以使用Properties.Settings.Default.SplitterDistance
,那么我永远不能使用ini文件,例如