Практическая работа по теме 2. Технические и программные средства реализации информационных процессов

advertisement
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Практическая работа по теме 2. Технические и
программные средства реализации информационных
процессов
Класс System.String: свойства и методы. Использование элементов
управления для построения интерфейса пользователя. Способы
взаимодействия с пользователем. Классы .NET для организации
взаимодействия с пользователем.
Практическая работа по теме 2. Технические и программные средства реализации
информационных процессов ........................................................................................................1
Задание 1. Свойства и методы класса System.String ..............................................................1
Задание 2. Элементы управления...........................................................................................14
Задание 3. Способы взаимодействия с пользователем ........................................................19
Задание 4. Классы .NET для организации взаимодействия с пользователем ....................21
Задание 1. Свойства и методы класса System.String
Задача
Научиться работать со строками: объединять строки, извлекать
подстроку, создавать строку из повторяющегося символа, изменять
регистр символов, разбивать строки на слова и так далее, другими
словами, изучить свойства и методы класса System.String.
Решение
Рассмотреть наиболее востребованные приемы по обработке строк и
символов.
Обсуждение
Строки – один из главных компонентов большинства приложений.
Обработка строк позволяет проверять вводимую пользователем
информацию, искать специфические слова или шаблоны в блоках
текста, инициировать диалог с пользователем.
Для работы с символьными данными в Visual Basic .NET имеется два
типа данных Char и String. Тип Char может хранить только один
символ, переменные типа String могут хранить группу символов, в
общей сложности до 2 Гбайт текста. Нумерация символов, из
которых состоит строка, начинается с нуля. Последовательность
символов, присваиваемая строковой или символьной переменной,
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
должна быть окружена двойными кавычками, а для переменной типа
Char заканчиваться символом «с» после кавычек:
Dim str As String = "Это строка"
Dim c As Char = “A”c ’ символ «с» указывает на тип Char
Dim ch As Char = ”*”c
В VB .NET строки могут быть представлены как объекты одного из
классов: System.Text.StringBuilder или System.String. Рассмотрим
представление строк как экземпляров класса System .String.
Класс System .String – это не просто массив символов, класс
располагает множеством свойств и методов для поиска, замены и
анализа текста, реализующих наиболее востребованные приемы
обработки строк.
Самостоятельно
Операция конкатенации применяется для объединения нескольких
строк в одну. Оператор конкатенации обозначается символом “&”. При
применении оператора к двум строкам вторая из этих строк
добавляется непосредственно в конец первой строки (сцепляется). В
результате получается более длинная строка, содержащая целиком
обе исходные строки. Например, при выполнении оператора
str2 = "Visual " & "Basic.NET"
в переменную str2 будет записана строка "Visual Basic .NET".
Для выполнения операции конкатенация можно использовать также
оператор &= и метод класса String.Concat. Оператор &= позволяет
присвоить результат конкатенации строк первой участвующей в
операции переменной
str2 &= " – новая платформа".
Метод Concat – это метод класса String, выполняющий те же
операции, что и оператор &. Метод Concat возвращает строку
символов, которая является конкатенацией всех его параметров.
str3 = String.Concat("Visual ", "Basic", ".NET")
Самостоятельно создайте консольное приложение для исследования
конкатенации строк.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Sub Main()
Dim str2, str3, str4 As String
str2 = "Visual " & "Basic.NET"
str3 = String.Concat("Visual ", "Basic", ".NET")
str4 = "2*5="
str4 &= 2 * 5
Console.WriteLine(str2)
Console.WriteLine(str3)
Console.WriteLine(str4)
Console.ReadLine()
End Sub
Для объединения строк вместо оператора & можно использовать
оператор +, но это не рекомендуется, так как если при конкатенации
строк оператором + одно из значений не будет являться строкой, VB
.NET попытается привести оба значения к типу Double и выполнить
численное сложение. Продемонстрируйте верность последнего
утверждения.
Самостоятельно
Сконструируйте консольное приложение для изучения следующего
вопроса.
При работе со строками и символами часто возникает проблема
«кавычек». Как ввести в строку кавычки? Для того чтобы вставить в
строку кавычки, можно использовать две двойные кавычки подряд:
Sub Main()
Dim str As String
str = "Языки программирования-это тоже ""языки"", но формальные"
Console.WriteLine(str)
Console.ReadLine()
End Sub
Добавление перед кавычкой еще одной, информирует компилятор о
том, что очередная кавычка не выполняет функцию символа
окончания строки, а является лишь очередным символом. Можно
чередовать разные кавычки: двойные и одинарные, но, так как
одинарная кавычка является указателем комментария к коду
программы, то начинать строку следует с двойной кавычки:
Sub Main()
Dim str As String
str = "Языки программирования - это тоже 'языки', но формальные"
Console.WriteLine(str)
Console.ReadLine()
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
End Sub
Другим способом размещения в строке кавычки является
конкатенация со строкой свойства Quote класса ControlChars.
Sub Main()
Dim str As String
str = "Языки программирования - это тоже" & ControlChars.Quote &
"языки" & ControlChars.Quote & ", но формальные"
Console.WriteLine(str)
Console.ReadLine()
End Sub
Сформируйте и организуйте вывод в консоль собственные фразы,
требующие применения кавычек.
Самостоятельно
Разработайте консольное приложение для перебора всех символов
строки.
Задача обработки всех символов строки по отдельности имеет более
одного решения. Один из вариантов решения – использовать цикл For
Each..Next
Sub Main()
Dim str As String
str = "VISUAL BASIC.NET"
Dim ch As Char
For Each ch In str
Console.WriteLine(ch)
Next
Console.WriteLine(str)
Console.ReadLine()
End Sub
Можно перебрать все символы
строки
другим
способом,
используя
индексированное
свойство класса String.Chars(i):
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Sub Main()
Dim str As String
str = "MS VB.NET"
Dim i As Integer
For i = 0 To str.Length - 1
Console.WriteLine(str.Chars(i))
Next
Console.WriteLine(str)
Console.ReadLine()
End Sub
В коде программы использованы свойства Chars и Length класса
String. Свойство Chars возвращает символ, стоящий в указанной
позиции. Причем первому символу в строке соответствует нулевое
значение индекса. Свойство только для чтения. Свойство Length –
свойство только для чтения, возвращает длину строки как целое
число.
Обратите внимание на способ организации цикла при переборе
символов строки. Так как нумерация символов строки начинается с 0,
цикл For Next организован с нуля до значения длины строки без 1.
Самостоятельно
Извлекая из строки символ, вы имеете не полный объект String, а
объект типа Char. Char – это простой размерный тип,
представляющий единственный символ. Класс Char имеет методы,
позволяющие получить информацию о конкретном символе: IsDigit
(возвращает True, если символ – цифра от 0 до 9), IsNumber, IsLetter,
IsLetterOrDigit, IsLower и IsUpper, IsPunctuation, IsSymbol
IsWhiteSpace. Эти методы удобно использовать для анализа
отдельных символов или символов строки.
Сконструируйте консоль, позволяющую подсчитывать количество
букв, цифр и знаков пунктуации в строке.
Sub Main()
Dim str As String
Dim ch As Char
str = "MS VB.NET 123"
Dim letter, digit, punctuation As Byte
For Each ch In str
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
If Char.IsLetter(ch) = True Then letter += 1
If Char.IsDigit(ch) = True Then digit += 1
If Char.IsPunctuation(ch) = True Then punctuation += 1
Next
Console.WriteLine(str)
Console.WriteLine("В строке " & letter & " букв")
Console.WriteLine("В строке " & digit & " цифр")
Console.WriteLine("В строке " & punctuation & " знаков пунктуации")
Console.ReadLine()
End Sub
Внесите изменения в программу:
1. Организуйте ввод строки пользователем непосредственно из
консоли.
2. Подсчитайте количество пробелов, строчных букв, прописных
букв в строке.
3. Создайте Windows-приложение с текстовым окном и командной
кнопкой для выполнения подсчета введенных в текстовом окне
символов. У текстового окна включите режим MultiLine=True.
Private Sub Button1_Click(ByVal
sender As System.Object, ByVal e As
System.EventArgs) Handles
Button1.Click
Dim str As String = TextBox1.Text
Dim ch As Char
Dim letter, digit, punctuation As Byte
For Each ch In str
If Char.IsLetter(ch) = True Then letter
+= 1
If Char.IsDigit(ch) = True Then digit +=
1
If Char.IsPunctuation(ch) = True Then
punctuation += 1
Next
MsgBox("В строке " & letter & " букв")
MsgBox("В строке " & digit & " цифр")
MsgBox("В строке " & punctuation & "
знаков пунктуации")
End Sub
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Самостоятельно
Реализуйте
исследование
метода
Equals
класса
String,
выполняющего сравнение строк. Исследование можно сделать как в
консоли, так и в Windows форме.
Сравнение двух строк можно выполнить одной из реализаций
перегруженного метода Equals класса String.
 String. Equals(a,b) – сравнивает строки a и b;
 строка1.Equals(строка2) – сравнивают указанную строку
строка2 с текущей строкой1;
 строка1. Equals(объект) – сравнивает объект с текущей
строкой1.
Следующий код демонстрирует результат работы метода Equals.
Sub Main()
Dim str1 As String = "Привет"
Dim str2 As String = "привет"
Dim str3 As String = "Привет"
If String.Equals(str1, str2) Then
Console.WriteLine("равны")
Else
Console.WriteLine("не равны")
End If
If str1.Equals(str3) Then
Console.WriteLine("равны")
Else
Console.WriteLine("не равны")
End If
Console.ReadLine()
End Sub
End Module
Самостоятельно
Используя New, перегруженный конструктор класса String,
принимающий единственный символ и число его повторов, можно
повторить многократно любой символ:
Dim Dashes As New String(“-“c, 100)
Спроектируйте любой интерфейс для работы с перегруженным
конструктором класса String.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Самостоятельно
Для работы с частью строк можно использовать метод Substring
(подстрока)
класса
String,
который
возвращает
символы,
начинающиеся с определенной позиции в строке. Чтобы использовать
метод Substring, нужно передать ему номер (индекс) позиции, с
которой начинается подстрока, и количество извлекаемых символов.
Если второй из этих аргументов пропущен, то Substring возвратит все
символы строки, начиная от указанного индекса и до конца строки:
Строка. Substring (startIndex, [length])
Например, при исполнении следующего кода, который вы
самостоятельно оформите в виде консольного приложения,
последовательно выводятся две строки ”Программирование” и “Visual
Basic.Net”
Module Module1
Sub Main()
Dim str As String = "Программирование в Visual Basic.Net"
Console.WriteLine(str.Substring(0, 15))
Console.WriteLine(str.Substring(19))
Console.ReadLine()
End Sub
End Module
Самостоятельно создайте Windows приложение с двумя текстовыми
окнами и командной кнопкой, щелчок по которой выполняет
перезапись части строки из одного текстового окна в другое.
Самостоятельно
Для поиска в тексте слов можно использовать метод IndexOf (индекс
для…):
Строка.IndexOf(СтрокаПоиска, [НачИндекс], [КонИндекс])
Метод имеет несколько параметров, но в самой простой форме
IndexOf принимает строку поиска и возвращает индекс того места в
строке, где начинается эта подстрока (первое включение). Второй
параметр указывает индекс, с которого нужно начинать поиск, третий
параметр указывает, где заканчивается поиск. Второй и третий
параметры не являются обязательными. Если метод IndexOf не может
найти нужную строку, то он возвращает значение -1. Следует помнить,
что методы строкового поиска чувствительны к регистру символов.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Module Module1
Sub Main()
Dim str As String = "В среду состоится лекция по программированию. "
Dim str1 As String, i As Integer, k As Integer, m As Integer
i = str.IndexOf("лекция")
k = str.IndexOf("с", 3)
m = str.IndexOf("прог", 5, 12)
Console.WriteLine(i)
Console.WriteLine(k)
Console.WriteLine(m)
Console.ReadLine()
End Sub
End Module
В нашем примере i должно получить значение 18, k получит значение
8 , хотя в строке буква с первый раз встречается в позиции 2, но сам
поиск начинается с позиции 3.
Самостоятельно докажите и дайте объяснение, что поиск символов
прог при указанных параметрах метода будет безуспешным. Как
изменить ситуацию, чтобы поиск был успешным?
Организуйте ввод исходной строки, и подстроки для поиска с консоли.
Вывод результатов поиска должен быть организован с необходимыми
пояснениями пользователю.
Самостоятельно
Метод Insert класса String вставляет указанную строку value в данную
строку, начиная с указанной позиции startIndex:
Строка. Insert (startIndex, value)
Module Module1
Sub Main()
Dim str As String = "Это дело житейское. "
Dim res As String
Dim value As String = "пустяки,"
res = str.Insert(4, value)
Console.WriteLine(res)
Console.ReadLine()
End Sub
End Module
Убедитесь, что после выполнения этого фрагмента переменной res
будет присвоено значение “Это пустяки, дело житейское.”.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Самостоятельно
Метод Replace класса String используется для замены всех
вхождений указанного символа или подстроки на другой символ или
подстроку:
Строка. Replace(oldValue, newValue)
Module Module1
Sub Main()
Dim str As String = "Ближе к делу. "
Dim res, s As String
res = str.Replace("делу", "телу")
s = "dingdong".Replace("d", "k")
Console.WriteLine(res)
Console.WriteLine(s)
Console.ReadLine()
End Sub
End Module
Измените, строки поиска
и
замены на собственные и
продемонстрируйте работу консольного приложения и функции
Replace.
Самостоятельно
Метод Remove позволяет удалить из строки указанное число
символов count, начиная с позиции startIndex :
Строка.Remove (startIndex, count)
Например, в следующем коде переменной res присваивается
значение “Это дело житейское”.
Module Module1
Sub Main()
Dim str As String = "Это пустяки, дело житейское"
Dim res As String
res = str.Remove(4, 9)
Console.WriteLine(res)
Console.ReadLine()
End Sub
End Module
Измените тип приложения для тестирования функциональности
метода Remove.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Самостоятельно
Методы StartsWith и EndsWith проверяют, начинается или
заканчивается данная строка с указанной подстроки value.
Результатом выполнения метода является логическое значение.
Module Module1
Sub Main()
Dim str As String = "Оценка – 5 (отл.)"
If str.StartsWith("Оц") Then
Console.WriteLine("Правильное начало")
End If
If str.EndsWith("(отл.)") Then
Console.WriteLine("Замечательный конец")
End If
Console.ReadLine()
End Sub
End Module
Продемонстрируйте работу методов StartsWith
собственных примерах строковых данных.
и
EndsWith
на
Самостоятельно
Методы ToLower и ToUpper возвращают копии исходной строки, в
которой
все
буквы
являются
прописными
и
строчными,
соответственно. Исследуйте методы самостоятельно в любом из
приложений. Пример консоли приведен ниже.
Sub Main()
Dim str As String = "Привет"
Console.WriteLine(str.ToLower) ' выводится: привет
Console.WriteLine(str.ToUpper) ' выводится: ПРИВЕТ
Console.ReadLine()
End Sub
Самостоятельно
Первая реализация перегруженного метода Trim удаляет все пробелы
из начала и конца строки, а вторая – все вхождения
специфицированных в массиве trimChars символов:
Строка. Trim()
Строка. Trim(trimChars)
Методы
TrimStart
и
TrimEnd
удаляют
все
вхождения
специфицированных в массиве trimChars символов из начала и конца
строки, соответственно:
Строка. TrimStart (trimChars)
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Строка. TrimEnd (trimChars)
В следующем примере показаны примеры работы методов усечения
строки.
Sub Main()
Dim str1 As String = " Привет "
Dim str2 As String = "####Привет&&&&###"
Console.WriteLine(str1.Trim()) ' выводится: Привет
Console.WriteLine(str2.Trim("#")) ' выводится: Привет&&&&
Console.WriteLine(str2.Trim("#", "&")) ' выводится: Привет
Console.WriteLine(str2.TrimStart("#")) ' выводится: Привет&&&&###”
Console.WriteLine(str2.TrimEnd("#", "&")) ' выводится: ####Привет
Console.ReadLine()
End Sub
Самостоятельно выполните сравнение двух строк, отличающихся
наличием пробелов, до их устранения в строке и после.
Самостоятельно
Первая реализация перегруженного метода Split разбивает строки на
подстроки посредством символов, заданных в массиве separators. Во
второй реализации метода, кроме того, указано максимальное число
возвращаемых подстрок count:
Строка. Split(separator())
Строка. Split(separator(),count)
Построим консольное приложение для исследования функции Split.
Module Module1
Sub Main()
Dim separators() As Char = {" "c, ","c} 'В качестве разделителей возьмем
символ пробела и запятую
Dim Mystr As String = " Это пустяки, дело житейское"
Dim i As Integer
Dim results() As String ' Объявляется массив для хранения строк
results = Mystr.Split(separators)
For i = 0 To results.GetUpperBound(0) ' Счет выполняется до верхней
границы массива. Обратите внимание на функцию GetUpperBound(0),
возвращающую, верхнюю границу массива: функция имеет входной
параметр, указывающий размерность массива, в нашем случае
массив-строка.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
If results(i) <> "" Then
Console.WriteLine(results(i))
Next i
Console.ReadLine()
End Sub
End Module
К сожалению, в случае использования массива разделителей,
включающего пробел, в итоговом массиве строк появятся пустые
строки, которые следует удалять, например, способом, предложенным
в упражнении, выполненном ранее.
Измените,
символ
разделителя,
попробуйте
использовать
перегруженный метод Split с указанием количества подстрок.
Самостоятельно
Функция Join делает работу, обратную той, что выполняет функция
Split: она объединяет элементы массива в строку, добавляя при этом
разделители. В качестве разделителя можно использовать любой
символ, например, пробел.
String.Join(разделитель, strArray)
Module Module1
Sub Main()
Dim Mystr() As String =
{"студенты", "3", "курса", "
группы", "143"}
Dim results As String
results = String.Join("/"с, Mystr)
Console.WriteLine(results)
Console.ReadLine()
End Sub
End Module
Исследуйте метод Join, он имеет две перегруженные версии, в нашем
примере рассмотрена первая версия метода. Вторую версию метода
изучите самостоятельно.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Задание 2. Элементы управления
Задача
Научиться разрабатывать интерфейс пользователя для Windows или
Web приложений с использованием стандартных элементов
управления, представленных на панелях Toolbox.
Решение
Рассмотреть практические примеры построения интерфейса
пользователя для работы со строковыми данными. Использовать
элементы панели Toolbox, изменяя их свойства динамически
(программным образом).
Обсуждение
Окно Toolbox предоставляет в распоряжение разработчика несколько
наборов элементов управления (для каждого типа приложения – свой
набор), которые можно располагать в форме во время ее
конструирования.
Свойства
элементов
управления
можно
устанавливать статическим способом при конструировании формы
или изменять динамически – в ходе программы.
Рассмотрим несколько конкретных примеров, позволяющих, с одной
стороны, получить навыки использования элементов в Windows
формах, с другой стороны, применить изученные методы класса String
в практических задачах.
Самостоятельно
Создайте Windows форму и расположите на ней следующие элементы
управления (рис. 1): Label (метку), TextBox (текстовое окно), Button
(командную кнопку), CheckBox (флажок), GroupBox (рамку), два
элемента RadioButton (переключатели).
Рамка (GroupBox) является контейнером для других элементов.
Элемент управления Переключатель (RadioButton) позволяет
пользователю выбор из двух альтернатив Да/Нет (True/False), причем,
в выбранном состоянии может находиться только один из
переключателей в группе (внутри GroupBox). Свойство Checked
возвращает состояние переключателя. Элемент управления Флажок
(CheckBox) позволяет делать выбор из двух альтернатив, при этом,
любое количество флажков может быть одновременно включено или
выключено. Основным, анализируемым в программном коде
свойством, также является свойство Checked. С элементами: Метка,
Текстовое поле и Командная кнопка вы уже знакомы.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 1. Интерфейс Windows формы с элементами управления
В код, созданный мастером проекта, добавьте инструкции из листинга.
Обратите внимание, что имеется три процедуры – обработчика
событий: для формы, для командной кнопки и для элемента CheckBox
(событие изменения его состояния).
Обработчик события загрузки формы.
Private Sub Form10_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
GroupBox1.Visible = False
End Sub
Обработчик события изменения состояния элемента управления
Флажок.
Private Sub CheckBox1_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
CheckBox1.CheckedChanged
GroupBox1.Visible = Not GroupBox1.Visible
End Sub
Обработчик события щелчка по командной кнопке.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim s As String
s = "Имя: " & TextBox1.Text & ControlChars.Cr
If GroupBox1.Visible Then
If RadioButton1.Checked Then
s += "Пол: Муж"
ElseIf RadioButton2.Checked Then
s += "Пол: Жен"
End If
MsgBox(s)
End If
End Sub
Измените код программы для выполнения следующего алгоритма:
1. Пользователь представляется, вводит свое имя и указывает пол.
2. В окне MsgBox в зависимости от указанного пользователем пола
появляется одно из приветствий: «Добрый день, уважаемый
Имя» или «Добрый день, уважаемая Имя».
Самостоятельно
Рассмотрим использование элемента управления Список (ListBox).
Список позволяет выводить массив значений, из которых
пользователь может выбрать одно или несколько (свойство
SelectionMode). Свойство Items предоставляет доступ к свойствам
отдельных элементов списка, их можно добавлять (Add), вставлять в
указанную позицию списка (Insert), удалять (Remove), очищать
полностью весь список (Clear).
Добавьте в вашу форму два элемента Список и измените алгоритм
программы (рис. 2).
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Private Sub Form10_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyBase.Load
GroupBox1.Visible = False
End Sub
Private Sub CheckBox1_CheckedChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
CheckBox1.CheckedChanged
GroupBox1.Visible = Not GroupBox1.Visible
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
If GroupBox1.Visible Then
If RadioButton1.Checked Then
ListBox1.Items.Add(TextBox1.Text)
Textbox1.clear()
ElseIf RadioButton2.Checked Then
ListBox2.Items.Add(TextBox1.Text)
Textbox1.clear()
End If
End If
End Sub
Рис. 2. Использование элементов управления Список для построения интерфейса
Самостоятельно
Продолжим изучение свойств и методов элемента ListBox (Список).
Свойства SelectedItem и SelectedIndex возвращают значение
выбранного элемента списка и его индекс в списке. ListBox
поддерживает событие Click, происходящее при щелчке мышью по
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
строке списка. Предположим, что нам необходимо обеспечить
пользователю возможность редактирования списков, то есть
переписывать выбранную строку в текстовое окно, удаляя выбранную
строку из списка. Напишем процедуру обработки события Click.
Private Sub ListBox1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ListBox1.Click
Dim i As Integer
TextBox1.Text = ListBox1.SelectedItem
i = ListBox1.SelectedIndex
ListBox1.Items.RemoveAt(i)
ListBox1.SelectedIndex = -1
End Sub
Private Sub ListBox2_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ListBox1.Click
Dim i As Integer
TextBox1.Text = ListBox2.SelectedItem
i = ListBox2.SelectedIndex
ListBox2.Items.RemoveAt(i)
ListBox2.SelectedIndex = -1
End Sub
Обратите внимание на строчку программного кода, в которой
происходит присвоение -1 текущему индексу списка (то есть никакая
строка списка не выбрана).
Самостоятельно
Тестируя элемент управления ListBox (Список) вы можете сделать
вывод, что компонент имеет некоторые особенности в использовании.
Недостатками компонента ListBox можно считать:
 невозможность ввода пользователем собственного значения
непосредственно в список;
 компонент ListBox занимает слишком много места в форме.
Всех
этих
недостатков
лишен
компонент
ComboBox
(комбинированный список). Он представляет собой комбинацию
элементов TextBox и ListBox. Работа с ComboBox практически не
отличается от работы с ListBox. Но есть некоторые отличия.
У компонента ComboBox имеется дополнительное свойство Text,
которое отсутствует у компонента ListBox. Данное свойство
аналогично свойству Text компонента TextBox. Пользователь может
ввести произвольную строку текста, если такая отсутствует в списке.
Измените в вашей форме элементы ListBox на ComboBox. Попробуйте
написать обработчик события для элементов ComboBox, который
фиксировал бы введенную пользователем строку в списке строк
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Combox. В качестве примера, ниже приведены два обработчика
событий нажатия клавиши Enter и потери фокуса элемента.
Private Sub ComboBox2_Enter(ByVal sender As Object, ByVal e As
System.EventArgs) Handles ComboBox2.Enter
ComboBox1.Items.Add(ComboBox2.Text)
ComboBox1.Text = ""
ComboBox1.SelectedIndex = -1
End Sub
Значение -1 присваивается свойству SelectedIndex для того, чтобы не
был выбран ни один из элементов ComboBox.
Private Sub ComboBox2_LostFocus(ByVal sender
As Object, ByVal e As System.EventArgs) Handles
ComboBox2.LostFocus
ComboBox2.Items.Add(ComboBox2.Text)
ComboBox2.Text = ""
ComboBox2.SelectedIndex = -1
End Sub
Задание 3. Способы взаимодействия с пользователем
Задача
Рассмотреть стандартные способы создания диалога с пользователем
приложения (диалоговые окна), реализованные в VB.NET.
Решение
Для организации диалогового режима с пользователем использовать
стандартные диалоги: окно сообщения – MsgBox и окно ввода –
InputBox.
Обсуждение
Иногда, по ходу выполнения программы, возникает необходимость
сообщить пользователю текущую информацию. Для этой цели удобно
использовать стандартное окно сообщений MsgBox. Выполняя
задания, вы имели возможность познакомиться с этим окном. Окно
MsgBox имеет очень простой синтаксис:
MsgBox(“текст сообщения”, [кнопки], [заголовок окна])
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Параметры, отмеченные
квадратными скобками, являются
необязательными, ранее мы с вами
их и не использовали. Рассмотрим
варианты использования MsgBox с
различными наборами входных
параметров.
MsgBox("Дополнительные
параметры скрыты")
MsgBox("Дополнительные
параметры скрыты", ,
"Предупреждение")
MsgBox("Дополнительные
параметры скрыты",
MsgBoxStyle.Information Or
MsgBoxStyle.OKCancel,
"Предупреждение")
Все возможные значения параметра кнопки в методе MsgBox
указываются в контекстной справке, возникающей сразу, как только вы
поставите запятую после строки сообщения. Можно выбрать
несколько параметров, но тогда их следует перечислять с помощью
оператора OR.
Функция MsgBox может возвращать значение (код нажатой кнопки),
тогда это код можно анализировать в ходе программы.
If MsgBox("Дополнительные параметры скрыты",
MsgBoxStyle.Information Or MsgBoxStyle.OKCancel, "Предупреждение")
= MsgBoxResult.Cancel Then Exit Sub
Самостоятельно
1. Примените окно сообщения MsgBox с расширенным составом
входных параметров.
2. Выполните анализ нажатых кнопок в вашем проекте.
С помощью рассмотренного окна сообщений MsgBox можно выводить
односложные сообщения типа Ok, Cancel. Если же необходимо
получить от пользователя незначительную по объему, но символьную
(текст, цифры) информацию, то удобнее использовать стандартное
окно InputBox. Синтаксис функции следующий:
InputBox(“текст запроса”, [заголовок окна], [значение по
умолчанию])
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Функция InputBox возвращает строковое значение, которое всегда
надо присваивать строковой переменной (в отличие от MsgBox).
Приведем пример вызова этой функции:
Dim str As String
str = InputBox("Введите
ваше имя", "Вопрос",
"Иванов Иван
Иванович")
Даже, если
пользователь должен
вводить и вводит
числовые значения
или дату, эти значения
возвращаются как
строка.
Самостоятельно
Измените полностью алгоритм работы вашего приложения «Символы
и строки».
1. Пусть пользователь вводит всю необходимую информацию с
помощью диалоговых окон.
2. Введенная информация, тем не менее, должна помещаться в
разные элементы управления, либо в одно из двух ListBox, либо
в одно из двух ComboBox (используйте любой элемент по
вашему
усмотрению),
в
зависимости
от
значения
дополнительного параметра (в предыдущем варианте таким
параметром был параметр «пол»).
Задание 4. Классы .NET для организации взаимодействия с
пользователем
Задача
Рассмотреть
класс
System.Windows.Forms.MessageBox
организации диалога с пользователем приложения.
для
Решение
Для организации диалогового режима с пользователем использовать
окно сообщений MessageBox.
Обсуждение
Класс
MessageBox
входит
в
пространство
имен
System.Windows.Forms. Он обеспечивает отображение на экране
только стандартных окон стандартных сообщений Windows. Поскольку
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
класс MessageBox является общим, создавать новый экземпляр
класса с помощью конструктора New не обязательно. Для того чтобы
вывести на экран окно сообщения, следует вызвать общий метод
Show класса MessageBox, как это показано ниже:
MessageBox.Show("Вы будете считать на калькуляторе?")
Метод Show перегружается для того, чтобы при необходимости можно
было отобразить пиктограмму MessageBox или заголовок, изменить
кнопки, появляющиеся в этой форме, задать кнопку, используемую по
умолчанию, либо указать, перед какой формой будет появляться окно.
Единственный обязательный параметр – это текст сообщения,
которое отображается в окне. Окно MessageBox, которое выводится
на экран в рассмотренном выше коде, изображено на рис. 3.
Следующий код вызывает метод Show, для выполнения которого
требуются все возможные параметры. Окно MessageBox, выводимое
при помощи этого кода, показано на рис. 4. Дополнительные сведения
о различных параметрах окна MessageBox читайте в тексте подсказки
при вызове метода Show.
MessageBox.Show(Me, "Вы будете считать на калькуляторе?",
"Калькулятор", MessageBoxButtons.OKCancel,
MessageBoxIcon.Question, MessageBoxDefaultButton.Button2,
MessageBoxOptions.RightAlign)
Рис. 4. Окно MessageBox с полным набором компонентов
Самостоятельно
Создайте собственное диалоговое окно. В приложение добавьте еще
одну Windows форму, разместите на ней необходимые элементы
управления, установите параметры (цвет, размер, заголовок, бордюр)
(рис. 5).
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Чтобы определить, на какой кнопке щелкнул пользователь, свойству
DialogResult
кнопок
присвойте
соответствующие
значения,
принадлежащие перечислению DialogResult.
После щелчка по кнопке значение DialogResulr возвращается
родительской форме. Анализ этого значения может быть выполнен,
например, с помощью оператора ветвления If..Then..Else..End if, с
которым вы еще не знакомы. Можно воспользоваться программным
кодом, приведенным далее, а можно, пока не программировать ответ
пользователя,
ограничиться
только
созданием
собственного
диалогового окна.
Рис. 5. Диалоговое окно пользователя
Ниже представлен код загрузки родительской формы (Form10), в
котором создается объект класса Form11 (это ваша диалоговая
форма, которую вы должны создать заранее). Для хранения кода
нажатой пользователем кнопки в диалоговом окне необходимо
объявить переменную типа DialogResult (перечисление всех
возможных вариантов кнопок).
Обратите внимание, что для диалоговой формы f вызывается функция
ShowDialog, в отличие от вызываемого ранее метода Show. Функция
ShowDialog возвращает код нажатой пользователем кнопки.
Private Sub Form10_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Dim f As New Form11
Dim result As DialogResult
result = f.ShowDialog
If result=DialogResult.OK Then
MessageBox.Show("Вы будете считать на калькуляторе?")
Else
MessageBox.Show("Вы не будете считать на калькуляторе?")
End If
f.Dispose()’ Это очень важная строка кода: форма не видна, но не
закрыта. Метод Dispose уничтожает объект f.
End Sub
Ниже представлен код загрузки созданного вами диалогового окна в
Windows форме (Form11). Для формы установлены параметры: цвет,
бордюр, текст на форме (установите любые).
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Private Sub Form11_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
Me.BackColor = Color.YellowGreen
Me.FormBorderStyle = FormBorderStyle.Fixed3D
Me.Text = "Продолжим диалог?"
End Sub
Download