Исследование MS Visual С#, страница 22

     tPhone.Text = ss[3]; tAddr.Text = ss[5];

     Add();

     sUndo = null;      bUndo.Visible = false;

     sTotal.Text = list.Items.Count.ToString();

  }

}

else if (e.Button == bFind)

{

  tName.Text = Trim(tName.Text);

  int id = list.FindString (tName.Text);

  if (id == ListBox.NoMatches)

     sNotFound.Show();

  else

     list.SelectedIndex = id;

}

else if (e.Button == bClose)

{

  Close();

}  

}

Если вам хочется заменить все if на более элегантный switch, то одним из способов решения может стать использование свойства Tag, которое есть у всех элементов управления. Подсказка приведена ниже, но сначала надо пришить к каждой кнопке свой Tag (ярлык, бирка).

switch (e.Button.Tag.ToString())

{

case "Open": // Ваш код

break;

}

Запустите приложение и попытайтесь прочесть файл с данными, который можно взять на сайте, так как я не надеюсь, что вам захочется вводить осмысленные данные. Добейтесь, чтобы кнопка, управляемая объектом bUndo класса ToolBarButton, вела себя иначе, чем та кнопка, которую вы удалили. Пусть она будет видима только в те моменты, когда она нужна. Подсказка: вместо свойства Enabled используйте свойство Visible.

Использование реестра Windows

При запуске приложение демонстрирует пустое окно, что выглядит уныло. Будет лучше, если попытаться открыть тот файл, с которым мы работали в последний раз. Для этого воспользуемся услугами реестра. Нам понадобятся два класса Registry и RegistryKey, которые определены в пространстве имен Microsoft.Win32. Вам надо сделать его доступным. Алгоритм таков:

¨  В момент закрытия окна приложения создаем или открываем ключ реестра (обычно это имя компании, создавшей программный продукт),

¨  Создаем или открываем подключ (subkey) реестра (обычно это имя приложения) и поставим ему в соответствие два значения: версию продукта (default value) и файловый адрес документа.

Введите в класс Form1 метод SetRegistry, который выполняет все перечисленные действия.

private void SetRegistry()

{

  //==== Выполните самостоятельно

}

Вызов метода SetRegistry следует осуществлять каждый раз, когда происходит выход из приложения. Для этого измените тело функции обработки события Closing.

private void Form1_Closing(object sender, CancelEventArgs e)

{

PromptSave();

SetRegistry ();  // Делаем запись в реестре

}

Теперь сформулируем что надо сделать, чтобы при открытии приложения файл, информацию о котором мы записали в реестр, автоматически загрузился в память и был открыт в окне приложения. Надо:

¨  Ввести в класс формы реакцию на событие Load,

¨  В функции обработки попытаться найти подключ реестра,

¨  Выудить из него файловый путь к документу. и попытаться открыть этот файл.

Событие Load происходит при каждом запуске приложения. Как поймать это событие? Надо просто дважды щелкнуть над формой (курсор не должен при этом попадать ни на один из элементов управления) и обработчик события будет создан. Выполните это и введите следующий код. Он предполагает, что вы создали ключ, который соответствует формату, предложенному выше.

private void Form1_Load (object sender, EventArgs e)

{

RegistryKey key = Registry.CurrentUser.OpenSubKey(// Открываем подключ реестра

  @"Software\AlexSoft\People");

string ver;

fileName = null;

if (key != null)     // Проверяем подключ реестра. Если он существует,

{   // и существует его значение по умолчанию и оно совпадает с текущей

      // версией, а также существует файловый путь, то мы открываем файл

  if ((ver = (string)key.GetValue(null)) != null

     && ver == version

     && (fileName = (string)key.GetValue("Last File")) != null)

     Open (fileName);

}

}

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

Компонент DataGrid

Для иллюстрации нового подхода к управлению списком людей целесообразно создать новый проект под именем PeopleGrid. В нем мы научимся работать с компонентом интерфейса под именем DataGrid. Этот элемент управления значительно более удобен в использовании, чем ListBox. Он позволяет производить редактирование данных на месте их размещения. Он эффективен при использовании и в более сложных сценариях, например, при отображении данных, хранимых в таблице реляционной базы данных, которую можно выбрать как на этапе компиляции, так и на этапе выполнения, то есть динамически.

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

1.  В меню File4New выберите команду Project, в диалоге New Project, (окно Project Types) раскройте узел под именем Visual C# Projects, а в окне Templates выберите тип проекта Windows Application.

2.  В поле Name задайте имя проекта PeopleGrid, а в поле Location удобный для вас файловый путь.

3.  Нажмите кнопку OK.

4.  Проанализируйте код стартовой заготовки.

Отметим следующие моменты:

¨  Оконная форма является контейнером (динамической коллекцией) компонентов и обычных элементов  управления (controls), которые добавляются в нее в режиме дизайна.

¨  Детали их описания прячутся в блоке кодов, расположенном между директивами #region-#endregion.

¨  Эти детали не следует редактировать вручную в окне редактора кодов. Лучше делать это с помощью механизма свойств, доступного в режиме дизайна, пользуясь  возможностями окна Properties.