Программирование для карманных компьютеров
Шрифт:
28. Код обработчика щелчка на кнопке PictureBox5 (удаление текущей записи) приведен в листинге 6.16. Листинг 6.16
Private Sub PictureBox5_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles PictureBox5.Click
If ListView1.SelectedIndices.Count > 0 Then
ListView1.Items.Remove(ListView1.Items(ListView1.SelectedIndices(0)))
End If
End Sub29. После того как были написаны обработчики для элементов управления основной формы, нужно сделать то же самое для формы редактирования данных. Сначала нужно объявить в этой форме переменную Send, как показано в листинге 6.17. Лиситнг 6.17
Public Class Form2
…
Public Send As Integer30. Теперь можно написать основные обработчики событий компонентов. Обработчик события загрузки формы должен различать, щелчком на котором элементе была загружена форма, и
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles MyBase.Load
Dim myCount As Integer
Dim myStrTime As String
ComboBox2.Items.Clear
ComboBox3.Items.Clear
\'Загружаем содержимое двух компонентов выпадающих списков, которые
\'должны отображать выбор временных интервалов от 00.00 до 23.55 c
\'дискретностью в 5 минут
For myCount = 0 To 287
Dim myTime1 As TimeSpan = TimeSpan.FromMinutes(myCount * 5)
myStrTime = myTime1.ToString
myStrTime = myStrTime.Substring(0, 5)
ComboBox2.Items.Add(myStrTime)
ComboBox3.Items.Add(myStrTime)
Next
\'Читаем список категорий в ComboBox1
Dim myxmlDoc As New Xml.XmlDocument
Dim dirStr As String
dirStr = IO.Path.GetDirectoryName_
(Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase.ToString)
ComboBox1.Items.Clear
myxmlDoc.Load(dirStr + «\Category.xml»)
For myCount = 0 To myxmlDoc.ChildNodes.Item(1). ChildNodes.Count – 1
ComboBox1.Items.Add_ (myxmlDoc.ChildNodes.Item(1). ChildNodes.Item(myCount). Name)
Next
ComboBox1.SelectedIndex = 0
ComboBox2.SelectedIndex = 0
ComboBox3.SelectedIndex = 0
\'Устанавливаем в ComboBox1 категорию, которая задана в последней
\'строке ListView
For myCount = 0 To ComboBox1.Items.Count – 1
If ComboBox1.Items(myCount) = categorySt Then
ComboBox1.SelectedIndex = myCount
Exit For
End If
Next
\'Для второго и третьего ComboBox так же устанавливаем значения
For myCount = 0 To ComboBox2.Items.Count – 1
If ComboBox2.Items(myCount) = startOfSt Then
ComboBox2.SelectedIndex = myCount
Exit For
End If
Next
For myCount = 0 To ComboBox3.Items.Count – 1
If ComboBox3.Items(myCount) = endOfSt Then
ComboBox3.SelectedIndex = myCount
Exit For
End If
Next
TextBox1.Text = noteSt
End Sub31. Обработчик щелчка на кнопке OK формы редактирования показан в листинге 6.19. Листинг 6.19
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button1.Click
\'Возвращаем в переменные установленные в элементах управления значения
categorySt = Me.ComboBox1.Text
startOfSt = Me.ComboBox2.Text
endOfSt = Me.ComboBox3.Text
noteSt = Me.TextBox1.Text
\'Возвращаем результат работы диалогового окна
DialogResult = DialogResult.OK
\'Закрываем форму
Me.Close
End Sub32. Код обработчика щелчка на кнопке Cancel формы редактирования приведен в листинге 6.20. Листинг 6.20
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles Button2.Click
DialogResult = DialogResult.Cancel
Me.Close
End Sub33. Осталось задать код еще двух обработчиков, предназначенных для автоматического отображения и скрытия программной панели ввода (виртуальной клавиатуры) при приобретении и потери фокуса текстовым полем TextBox. Код этих обработчиков приведен в листинге 6.21. Листинг 6.21
Private Sub TextBox1_GotFocus(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles TextBox1.GotFocus
InputPanel1.Enabled = True
End Sub
Private Sub TextBox1_LostFocus(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles TextBox1.LostFocus
InputPanel1.Enabled = False
End SubМы, наконец, создали несовершенный, но вполне работающий вариант программы. Проект можно скомпилировать и запустить на выполнение. После запуска приложения можно убедиться, что файлы создаются и читаются, записи добавляются, переход от одной даты к другой осуществляется корректно, а после выключения программы все изменения вносятся в файл 2005.xml.
Использование нестандартных компонентов
Безусловно, если вы попытались уже воспользоваться программой, вы заметили один большой недостаток. Приложение не позволяет перейти к произвольной дате, заставляя
Этот недостаток был бы легко устраним, если бы в. NET CF был элемент управления, который в стандартном VB.NET называется DateTime Picker. Поскольку данное неудобство, видимо, было замечено не только нами, инициативные разработчики создали такой элемент управления для. NET CF. Его можно свободно загрузить с сайта Microsoft.
Для этого необходимо войти на сайт www.microsoft.com и набрать в строке поиска строку DateTimePickerDesignTimeSampleSetup.exe. Поиск выдаст ссылку на статью Дж. Вилсона Adding Designer Support to the.NET Compact Framework DateTimePicker Control, внутри которой есть ссылка на необходимый файл. Но можно воспользоваться и прямой ссылкой download.microsoft.com/download/c/0/a/c0a7cea4-e9c1-4e80-9e5a-afed9a664876/DateTimePickerDesignTimeSampleSetup.exe.
Загрузив этот файл, его необходимо запустить. Программа установки выполнит все необходимые операции. Необходимые файлы будут размещены в папке С: \ Program Files\.NET Compact Framework Samples\DateTimePicker DesignTime Sample.
Для того чтобы воспользоваться компонентом, необходимо проделать нехитрую последовательность действий.
? В папке C: \Program Files\.NET Compact Framework Samples\DateTimePicker DesignTime Sample\code\CS найти файл DateTimePickerControl.sIn и открыть его двойным щелчком мыши.
? В открывшемся экземпляре Visual Studio выполнить команду Deploy Solution.
? Закрыть Visual Studio.
? Перейти в папку C: \Program Files\.NET Compact Framework Samples\DateTimePicker DesignTime Sample\code\CS\DateTimePickerControl.Deployment\Debug, найти в этой папке файл Setup.exe, запустить его и провести установку. После этого можно пользоваться компонентом DateTime Picker.
Теперь нужно модифицировать наш проект при помощи этого компонента.
Упражнение 6.2 (продолжение)
34. В форме Forml.vb нужно удалить компонент Labell и заменить его компонентом DateTimePicker, который можно найти после установки на палитре ToolBox.
Рис. 6.15. Компонент DateTimePicker в палитре и на форме.
35. В процедуре Form1_Load удалить строку
Label1.Text = System.DateTime.Today.ToShortDateString
36. Вместо нее добавить следующую строку
DateTimePicker1.Value = System.DateTime.Today
37. В процедурах PictureBox1_Click и PictureBox2_Click строку Data_Save(Label1.Text) нужно заменить строкой Data_Save(DateTimePicker1.Value.ToShortDateString).
38. В процедуре Form1_Closing нужно удалить строку Data_Save(Label1.Text) и вместо нее ввести строку Data_Save(DateTimePicker1.Value.ToShortDateString).
39. В процедуре Form1_Closing строку Data_Save(Label1.Text) нужно заменить вызовом обновленного варианта функции сохранения данных Data_Save(DateTimePicker1. Value.ToShortDateString).
40. Также нужно объявить в начале формы еще одну переменную при помощи конструкции Dim dtpClick As Boolean.
41. В код формы нужно добавить еще две процедуры, показанные в листинге 6.22.
Листинг 6.22Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles DateTimePicker1.ValueChanged
If dtpClick = True Then
Data_Save(D.ToShortDateString)
D = DateTimePicker1.Value
Data_Load(D.ToShortDateString)
dtpClick = False
End If
End Sub
Private Sub DateTimePicker1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles DateTimePicker1.Click
dtpClick = True
End Sub42. Теперь проект можно снова запустить на выполнение. Результат работы при щелчке на компоненте DateTimePicker должен быть таким, как показано на рис. 6.16.
43. Теперь можно поработать над удобством использования приложения. В область размещения невидимых компонентов нужно добавить компонент ContextMenu. Нужно щелкнуть на этом компоненте, а затем на форме добавить к его отображению пункты меню Добавить, Редактировать и Удалить, как это показано на рис. 6.17.