C# сохранить положение нескольких сплиттеров в файле user.config
В моей winform есть некоторый Splitter для разделения некоторых видов данных, есть ли способ сохранить (и восстановить) позицию разделителя в user.config?
Я хотел бы избежать добавления параметра с другим именем для каждого сплиттера, если это возможно.
заранее спасибо
2 ответа
Я придумал что-то, что вы можете использовать. Несколько вещей об этом примере:
- я использовал
SplitContainer
, но я полагаю, вы могли бы приспособить это довольно легко. - Я только сканирую список элементов управления формы - этот метод не подхватит все
SplitContainer
(вам, вероятно, нужно сделать это рекурсивно). - Предполагается, что у вас есть пользовательский параметр SplitterPositions типа
string
, - Это не учитывает будущие изменения в форме (т. Е. Перераспределение элементов управления, добавление новых разделов, удаление существующих разделов и т. Д.), Поэтому это немного хрупко в этом отношении.
Я бы лично рекомендовал присваивать имена 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];
}
}
Вы можете использовать библиотеку из статьи " Настройки пользователя", чтобы сохранить положение разделителя в настройках пользователя.
Кроме того, вы можете сохранить размер / местоположение формы и любые пользовательские настройки формы.