Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Пример проекта с двумя формами. Проект Переводчик.
Создайте новый проект. На форму поместите элемент класса ListBox (элемент со списком), командную кнопку и надпись (см. левый рисунок). Добавьте в проект еще одну форму с помощью команды меню Проект/Добавить форму. На второй форме разместите текстовое поле, надпись и две командные кнопки. Можете разместить на форме для красоты, какую–нибудь картинку, как на рисунке справа. Свяжите с процедурами обработки событий элементов форм нижеследующий код. С помощью окна макета разместите обе формы на экране так, как нужно вам. Лучше всего, чтобы они были одна под другой. Сохраните проект в своей папке под именем Переводчик. Изучите код программы. Запустите программу и посмотрите, как она работает. Код в Форме Словарь
1. Option Explicit 2. Dim Значение As String 3. Private Sub Command1_Click() 'закрывает первую форму 4. End 5. End Sub
6. Private Sub Form_Load() 7. List1.AddItem ("Cat"), 0 8. List1.AddItem ("Cut"), 1 9. List1.AddItem ("Apple"), 2 10. List1.AddItem ("Door"), 3 11. List1.AddItem ("Map"), 4 12. List1.AddItem ("Window"), 5 13. List1.AddItem ("Cap"), 6 14. List1.AddItem ("Tee"), 7 15. End Sub
16. Private Sub List1_DblClick() 17. Select Case List1.ListIndex 18. Case 0 19. Значение = "Кот" 20. Case 1 21. Значение = "Вырезать" 22. Case 2 23. Значение = "Яблоко" 24. Case 3 25. Значение = "Дверь" 26. Case 4 27. Значение = "Карта" 28. Case 5 29. Значение = "Окно" 30. Case 6 31. Значение = "Чашка" 32. Case 7 33. Значение = "Чай" 34. End Select
35. Load Form2 36. Form2.Label1 = List1.Text 37. Form2.Text1 = Значение 38. Form2.Show 39. End Sub
Код в форме Перевод 40. Option Explicit 41. Dim Печать As String 42. Private Sub Command1_Click() 'скрывает и закрывает вторую форму 43. Form2.Hide 44. Unload Form2 45. End Sub 46. Private Sub Command2_Click() 47. Cls 48. Печать = MsgBox("Напечатать исходное слово и его перевод?", vbOKCancel, "Запрос на печать") 49. If Печать = 1 Then 50. Printer.Print "" 51. Printer.FontName = "TimesNewRomanCyr" 52. Printer.FontSize = 18 53. Printer.FontBold = True 54. Printer.Print Label1.Caption 55. Printer.FontBold = False 56. Printer.Print Text1.Text 57. Printer.EndDoc 58. End If 59. Печать = MsgBox("Напечатать окно с переводом?", vbOKCancel, "Запрос на печать") 60. If Печать = vbOK Then 61. Form2.PrintForm 62. End If 63. Print Form1.List1.List(Form1.List1.ListIndex) 64. End Sub
При загрузке формы в строках 7-14 формируется список. К объекту List методом AddItem (добавить элемент) добавляются элементы, и каждому из них присваивается индекс, чтобы его можно было идентифицировать в списке. В строке 2 описана строковая переменная Значение. В строках 16-39 (в процедуре запускаемой по двойному щелчку по элементу списка) с помощью конструкции Select.. Case…EndSelect анализируется индекс элемента списка и его перевод на русский язык присваивается переменной Значение. В строках 35-38 загружается вторая форма (ее имя Form2, а надпись в заголовке Перевод), ее элементу надписи присваивается значение элемента списка первой формы, т.е. исходное иностранное слово (строка 36), а в текстовое поле заносится переменная Значение (строка 37). После этого вызывается метод Show (показать) для второй формы. Таким образом, во второй форме оказывается исходное слово и его перевод. Далее разумно попытаться напечатать исходное слово и перевод или вторую форму полностью. За эти операции отвечает кнопка Command2 с надписью "Печать" во второй форме. В строке 41 кода для второй формы описана строковая переменная Печать, которая будет принимать значения, возвращаемые функцией MsgBox. Она описана как строковая, а функция возвратит значение типа Integer (целое), но благодаря "интеллектуальности" VB преобразование типов будет выполнено правильно и незаметно для нас. Вообще говоря, такие эксперименты лучше не ставить. Если вы точно не знаете, значение какого типа вернет выражение, то не описывайте тип переменной стоящей слева от оператора присвоения и она получит по умолчанию универсальный тип Variant. Если в окне сообщения, выведенного функцией MsgBox, пользователь нажмет кнопку ОК, то функция вернет переменной Печать константу с именем VbOK, равную единице. Поэтому можно выполнить проверку двояко: на 1 или на имя константы (строки 49 и 60). В строке 48 запрашивается разрешение на вывод исходного слова и его перевода на принтер. В случае ответа ОК (т.е. 1), выполняется код в строках 49 – 58, если же в окне сообщения пользователь нажал кнопку Cancel (отмена), то функция MsgBox вернет константу VbCancel и эти строки не будут выполняться. В строке 50 печатается пустая строка с помощью метода Print объекта Printer. В строках 51 – 53 устанавливаются параметры шрифта для печати, как свойства объекта Printer (имя шрифта, размер, жирность). В строке 54 печатается значение свойства Caption объекта Label1 второй формы. Как мы помним, – это исходное иностранное слово. Далее, в строке 55 отменяется жирность и в строке 56 печатается значение свойства Text объекта Text1 второй формы (т.е. перевод). В строке 57 вызывается метод EndDoc, который заканчивает сеанс работы с объектом Printer. Хочу еще раз отметить, что мы работаем не с физическим принтером, стоящим на вашем столе, а с объектом Printer, определенном в VB. Этот объект умеет понимать нас, и сам разбирается с физическим печатающим устройством. В этом огромное преимущество Windows, а в старых ОС программисту приходилось самому организовывать практически весь процесс печати. Далее, в строке 59 выдается запрос на печать второй формы целиком. Если пользователь отвечает ОК, вызывается метод PrintForm для формы Form2 (строка 61) и форма печатается целиком, так как мы ее видим на экране. Строка 63 введена в программу в учебных целях и выводит исходное слово в левом верхнем углу второй формы. Проследим интересные моменты процесса отладки программы на примере этой строки. Закончите выполнение программы и перейдите в режим конструктора. Щелкните правой кнопкой мыши на кнопке второй формы с надписью "Печать" и выберите команду Показать код. Если этой формы нет на экране, дважды щелкните по ее имени в окне объектов вашего проекта, и она появится. В серой вертикальной полосе напротив строки 63, щелкните мышью и там появится жирная коричневая точка и вся строка станет коричневой. Это значит, что мы установили в программе точку останова при выполнении программы. Как только программа дойдет до этого места, VB откроет окно кода в режиме отладки и подсветит строку желтым цветом. Запустите программу. Дважды щелкните на слове "Door" в списке слов первой формы. Откроется окно второй формы с переводом. Нажмите в ней кнопку с надписью "Печать" два раза и оба раза откажитесь от предложения напечатать слово или окно. После этого VB откроет окно отладки. Наведите указатель мыши на слово Form1, стоящее до скобок в этой строке. Вы увидите что-то похожее на Form1.List1.List(Form1.List1.ListIndex) и = "Door". Это означает, что метод Print собирается вывести на форму слово из списка первой формы. Наведите мышь на любое слово в скобках. Вы увидите что-то вроде Form1.List1.ListIndex = 3. Это означает, что индекс этого слова будет равен 3. Так как это слово "Door", то результат всего выражения также будет "Door". Щелкните по коричневой точке, и она пропадет. Точка останова удалена, и программа больше не будет на ней останавливаться. Вот таким образом (он не единственный!) можно контролировать ход выполнения программы и даже узнавать значения, которые принимают свойства или переменные в процессе выполнения программы. Другой, из возможных способов еще проще – вставляйте в сомнительных местах функцию MsgBox, чтобы она выводила нужные вам данные, как это было показано в различных примерах. И последнее, что хотелось бы отметить в этом примере. Везде в тексте программы (кроме куска кода, реализующего печать) сделаны явные обращения к формам по их имени (Form1 или Form2), и нигде не использовалось краткое обращение Me. Этого стиля надо придерживаться, так как порой трудно бывает сказать, какая из форм является активной в данный момент и, следовательно, к какой форме будет относиться обращение Me (т.е. к какому активному объекту). Тоже можно сказать и об элементах интерфейса. Например, и первая, и вторая форма содержат элементы с именем Label1 и Text1. Если мы просто запишем имя элемента, то будет не ясно, какую же форму мы имеем ввиду? Поэтому в подобных случаях необходимо использовать полную нотацию при обращении к свойствам объектов. Если вы так уж желаете использовать сокращения, то надо, по крайней мере, явным образом передать фокус нужному элементу или форме с помощью метода SetFocus. Например, Form1. SetFocus. В этом примере мы рассмотрели работу с несколькими формами, организацию важного для практики процесса печати, функцию MsgBox возвращающую значение, ознакомились с методом Hide для формы.
Пример 10
|