Spl Container SplitterDistance изменяется без вмешательства пользователя
Приложение My Winforms сохраняет и восстанавливает свое состояние графического интерфейса в базе данных. Все работает нормально, за исключением SplitterDistance Split Container.
Значение правильно загружается и устанавливается из БД, но когда я выхожу из приложения, не касаясь сплиттера, я ожидаю, что оно сохранит то же значение. Но это сохраняет начальное значение минус 25 пикселей. Если я много раз открываю и закрываю приложение, расстояние разветвителя уменьшается на 25 пикселей каждый раз.
Это не пользовательский элемент управления, просто старый.NET SplitContainer. Доступ к элементу управления осуществляется только программно, чтобы загрузить его начальный SplitterDistance и сохранить его при выходе, больше ничего.
Как я могу устранить это?
ОБНОВЛЕНИЕ: Spl FixedPanel
свойство изначально было установлено None
, Пытался установить его Panel1
а также Panel2
; в обоих случаях SplitterDistance увеличивается на 50 пикселей при сохранении.
1 ответ
У вас есть пользовательские элементы управления внутри разделенного контейнера, и, вероятно, когда все они будут загружены, его размер будет изменен вместе с пользовательскими элементами управления, которые его содержат.
Чтобы устранить это, установите свойство 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();
}
Я создал PropertyBinding для splContainer.SplitterDistance, но не привязывал его к свойству, просто чтобы он был в файле ApplicationSettings.
int splitContainery = Properties.Settings.Default.SplitterDistance;
если бы я мог использовать Properties.Settings.Default.SplitterDistance
поэтому я никогда не смогу использовать файл ini, например