Владимир Волков - Программирование для карманных компьютеров
Data_Save(Label1.Text)
D = DateAdd(DateInterval.Day, 1, D)
Label1.Text = D.ToShortDateString
Data_Load(D.ToShortDateString)
End Sub26. Обработчик щелчка на кнопке PictureBox3, который отвечает за добавление очередной записи в текущий день, показан в листинге 6.14. Листинг 6.14
Private Sub PictureBox3_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles PictureBox3.Click
Dim lvIt As ListViewItem
'Создаем диалоговую форму редактирования
Dim MyForm As New Form2
'Устанавливаем флаг, показывающий, что был щелчок на кнопке 3
MyForm.Send = 3
'Если ListView не пустой, копируем значения полей текущей записи в
'переменные так, что время конца в текущей записи станет временем начала
'в создаваемой записи
If ListView1.Items.Count > 0 Then
categorySt = ListView1.Items.Item_
(ListView1.Items.Count – 1). SubItems(0). Text
startOfSt = ListView1.Items.Item_
(ListView1.Items.Count – 1). SubItems(2). Text
endOfSt = startOfSt
noteSt = ""
Else
categorySt = ""
startOfSt = ""
endOfSt = ""
noteSt = ""
End If
'Выводим на экран форму редактирования записи
If MyForm.ShowDialog() = DialogResult.OK Then
'Ресли редактирование завершилось щелчком на кнопке OK, добавляем новую
'запись в ListView
lvIt = New ListViewItem(categorySt)
ListView1.Items.Add(lvIt)
ListView1.Items.Item.(ListView1.Items.Count – 1). SubItems.Add(startOfSt)
ListView1.Items.Item.(ListView1.Items.Count – 1). SubItems.Add(endOfSt)
ListView1.Items.Item.(ListView1.Items.Count – 1). SubItems.Add(noteSt)
End If
End Sub27. Обработчик щелчка на кнопке PictureBox4, который отвечает за редактирование текущей записи, показан в листинге 6.15. Листинг 6.15
Private Sub PictureBox4_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles PictureBox4.Click
'Если в ListView есть выделенная строка, тогда редактируем
If ListView1.SelectedIndices.Count > 0 Then
Dim MyForm As New Form2
'Сообщаем форме редактирования, что был щелчок на кнопке 4
MyForm.Send = 4
'Копируем значения полей записи в переменные
categorySt = ListView1.Items(ListView1.SelectedIndices_(0)). SubItems(0). Text
startOfSt = ListView1.Items(ListView1.SelectedIndices(0)). SubItems(1). Text
endOfSt = ListView1.Items(ListView1.SelectedIndices(0)). SubItems(2). Text
noteSt = ListView1.Items(ListView1.SelectedIndices(0)). SubItems(3). Text
'Если редактирование завершилось щелчком на кнопке OK, копируем возвращенные
'значения переменных в соответствующие поля ListView
If MyForm.ShowDialog() = DialogResult.OK Then
ListView1.Items(ListView1.SelectedIndices(0)). SubItems(0). Text = categorySt
ListView1.Items(ListView1.SelectedIndices(0)). SubItems(1). Text = startOfSt
ListView1.Items(ListView1.SelectedIndices(0)). SubItems(2). Text = endOfSt
ListView1.Items(ListView1.SelectedIndices(0)). SubItems(3). Text = noteSt
End If
End If
End Sub28. Код обработчика щелчка на кнопке 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. Теперь можно написать основные обработчики событий компонентов. Обработчик события загрузки формы должен различать, щелчком РЅР° котором элементе была загружена форма, Рё вести себя соответственно. Рто поведение задается РІ РєРѕРґРµ, который приведен РІ листинге 6.18. Листинг 6.18
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.
Рспользование нестандартных компонентов
Безусловно, если вы попытались уже воспользоваться программой, вы заметили один большой недостаток. Приложение не позволяет перейти к произвольной дате, заставляя пользователя последовательно переходить от одного дня к другому.