Й способ. В С# для компонента Form определено свойство Controls, которое получает коллекцию всех элементов управления

В С # для компонента Form определено свойство Controls, которое получает коллекцию всех элементов управления, содержащихся на форме. Для этого свойства определен метод Find (), выполняющий поиск элементов управления по их свойству Name и создающий массив из всех элементов управления, которые соответствуют условиям поиска. Воспользуемся этим методом в коде обработчика события Click кнопки AddButton.

private void AddButton_Click(object sender, EventArgs e)

{

string s = "listBox" + (OrgTabControl.SelectedIndex + 1);

ListBox CurrentListBox = (ListBox)Controls.Find(s, true)[0];

CurrentListBox.Items.Add(RecordTextBox.Text);

RecordTextBox.Text = "";

}

Запустите проект. Попробуйте добавить строки на разные страницы ежедневника.

При таком способе можно в любой момент разработки добавлять новые страницы ежедневника (например, “Важное” или “Купить”) и это не повлечет за собой необходимость изменения программного кода.

Воспользуемся этим же способом определения компонента ListBox, расположенного на текущей вкладке ежедневника, для того чтобы при выборе определенной строки в списке заметок пользователя в окне редактирования RecordTextBox отображалась выбранная запись. Создайте обработчик события Click для компонента listBox1.

private void listBox1_Click(object sender, EventArgs e)

{

string s = "listBox" + (OrgTabControl.SelectedIndex + 1);

ListBox CurrentListBox = (ListBox)Controls.Find(s, true)[0];

RecordTextBox.Text = (string)CurrentListBox.SelectedItem;

}

Далее для всех остальных компонентов ListBox укажите, чтобы при событии Click выполнялся обработчик этого события компонента listBox1. Для этого для каждого из оставшихся компонентов ListBox в окне Properties на вкладке событий справа от события Click выберите в списке listBox1_Click.

Запустите проект. Проверьте правильность выполнения.

Для того чтобы заметки, введенные пользователем, сохранялись и после закрытия приложения, и загружались в ежедневник при его последующем открытии, необходимо организовать их сохранение в файлы и считывание из файлов. Положим, что содержимое каждого дня ежедневника будет храниться в отдельном текстовом файле с расширением “ org ”, при этом название файла будет совпадать с выбранной пользователем датой, например, “18 июня 2011 г.org”.

Для хранения имени текущего файла опишите в классе формы строковую переменную FileName. В обработчике события Load главной формы приложения MainForm определите значение этой переменной:

private void MainForm_Load(object sender, EventArgs e)

{

FileName = dateTimePicker1.Text + "org";

}

Опишите метод SaveToFile сохранения содержимого ежедневника в файл с заданным именем следующим образом:

private void SaveToFile(string FileName)

{

try

{

//открываем файл для записи

using (StreamWriter sw = new StreamWriter(FileName))

{

// перебираем все компоненты ListBox

for (int i = 1; i <= 3; i++)

{

//задаем текущий компонент ListBox по имени

ListBox CurListBox =

(ListBox)Controls.Find("listBox" + i, true)[0];

//записываем в файл количество строк в списке sw.WriteLine(CurListBox.Items.Count.ToString());

//записываем в файл все записи из списка ListBox for (int j = 0; j < CurListBox.Items.Count; j++)

sw.WriteLine(CurListBox.Items[j]);

//очищаем список записей текущего ListBox CurListBox.Items.Clear();

}

}

}

catch

{

MessageBox.Show("Ошибка при сохранении!");

}

}

Поясним код. Для записи данных в текстовый файл, имя которого определено в переменной FileName, создаем экземпляр класса StreamWriter (не забудьте подключить System.IO в разделе using). Далее последовательно записываем в файл информацию, содержащуюся в каждом из трех компонентов ListBox, предварительно указав количество записей в текущем списке. В результате файл будет иметь следующую структуру:

N 1 – количество строк в компоненте listBox1

listBox1. Items [1]

… строки, содержащиеся в списке listBox1

listBox1. Items [ N 1]

N 2 – количество строк в компоненте listBox2

listBox2. Items [1]

… строки, содержащиеся в списке listBox2

listBox2. Items [ N 2]

N 3 – количество строк в компоненте listBox3

listBox3. Items [1]

… строки, содержащиеся в списке listBox3

listBox3. Items [ N 3]

Отметим, что в случае, когда при сохранении данных указывается короткое имя файла (без указания пути), файл сохраняется в каталог …/ Bin / Debug / текущего решения.

Аналогичным образом опишите метод LoadFromFile считывания данных из заданного файла. Обратите внимание на то, что в случае, когда заданный файл не найден (блок catch), необходимо полностью очищать содержимое страниц ежедневника.

Итак, при запуске приложения необходимо загрузить данные из соответствующего файла. Добавьте в конец обработчика события Load главной формы приложения MainForm вызов метода LoadFromFile:

private void MainForm_Load(object sender, EventArgs e)

{

FileName = dateTimePicker1.Text + "org";

LoadFromFile(FileName);

}

При выборе некоторой даты в компоненте DateTimePicker необходимо, во-первых, сохранить содержимое списков записей текущего дня, далее изменить дату и загрузить содержимое списков записей из соответствующего файла. В случае если такой файл не найден, необходимо просто очистить содержимое страниц ежедневника.

Создайте обработчик события ValueChanged компонента DateTimePicker и поместите туда следующий программный код:

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)

{

SaveToFile(FileName);

FileName = dateTimePicker1.Text.Replace(" ", "") + "org";

LoadFromFile(FileName);

}

Запустите приложение, убедитесь в его работоспособности.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: