Я бы следил за процессом сохранения цветов при закрытии формы, загрузки цветов при загрузке формы, а затем применения цветов по умолчанию после их загрузки. Я сохраняю настройки в глобальной переменной внутри формы, поэтому я могу ссылаться на них по имени. Переменная настроек:
public Dictionary<string, FieldColor> colorSettings = new Dictionary<string, FieldColor>();
Я использую следующую структуру, потому что в настоящее время у вас есть два цвета, но вы можете добавить больше свойств, если возникнет необходимость. Структура данных:
public struct FieldColor
{
public Color BackColor;
public Color ForeColor;
public FieldColor(Color backColor, Color foreColor)
{
this.BackColor = backColor;
this.ForeColor = foreColor;
}
}
Метод сохранения выполняет итерацию по каждому элементу управления, затем выполняет итерацию по его дочерним элементам управления, и, если цвет не является цветом формы по умолчанию, он сохраняет строку. Это сохраняет его как csv. Сохранять:
public void SaveFieldColors(Control parent, StreamWriter colorWriter)
{
foreach (Control currentControl in parent.Controls)
{
if (currentControl.ForeColor != DefaultForeColor || currentControl.BackColor != DefaultBackColor)
{
//Save the file in your format
colorWriter.WriteLine(currentControl.Name + "," + currentControl.BackColor.ToArgb() + "," + currentControl.ForeColor.ToArgb());
}
ApplyDefaultColorToControls(currentControl);
}
}
Чтобы загрузить настройки, я просто разбиваю каждую строку на запись в словаре colorSettings. Нагрузка:
public void LoadFieldColors(StreamReader colorReader)
{
while (colorReader.EndOfStream == false)
{
//Read the file from your format
string line = colorReader.ReadLine();
string[] fieldData = line.Split(',');
colorSettings.Add(fieldData[0], new FieldColor(Color.FromArgb(int.Parse(fieldData[1])), Color.FromArgb(int.Parse(fieldData[2]))));
}
}
Здесь я перебираю каждый элемент управления и его дочерние элементы, чтобы применить форматирование, если есть запись для имени этого элемента управления. Если его нет, я просто устанавливаю его по умолчанию. Примените форматирование:
public void ApplyDefaultColorToControls(Control parent)
{
foreach (Control currentControl in parent.Controls)
{
if (colorSettings.ContainsKey(currentControl.Name) == true)
{
//Set the controls settings equal to their color in your stored dictionary
currentControl.BackColor = colorSettings[currentControl.Name].BackColor;
currentControl.ForeColor = colorSettings[currentControl.Name].ForeColor;
}
else
{
//Set the control settings equal to default settings
currentControl.BackColor = DefaultBackColor;
currentControl.ForeColor = DefaultForeColor;
}
ApplyDefaultColorToControls(currentControl);
}
}
Пример вызовов из событий формы:
private void Form1_Load(object sender, EventArgs e)
{
using (StreamReader settingsReader = new StreamReader(@"C:\path\to\file\filename.ending"))
{
LoadFieldColors(settingsReader);
}
ApplyDefaultColorToControls(this);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
using (StreamWriter settingsWriter = new StreamWriter(@"C:\path\to\file\filename.ending"))
{
SaveFieldColors(this, settingsWriter);
}
}
}
person
lamorach
schedule
15.07.2015