Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Волченков Проектирование WИНДОWС-приложениы на языке ВИСУАЛ БАСИЦ 2015

.pdf
Скачиваний:
5
Добавлен:
12.11.2022
Размер:
2.37 Mб
Скачать

При создании процедур проекта данного приложения ограничимся рассмотрением всего двух массивов элементов управления:

массивом N(1)текстовых полей для операндов (2 элемента);

массивом R(1) радиокнопок (Radio Buttons) для фиксации

ввода одного из двух чисел (2 элемента).

Значение переменной i – это номер операнда или значение индекса соответствующего массива (0 или 1). Щелчок той или другой радиокнопки будет присваивать этой переменной соответствующее значение.

Объявление переменной и указанных двух массивов, а также процедуры загрузки формы, двух кнопок управления u1 (очистки всех текстовых полей) и u2 (удаление неудачно введённого симво-

ла) следующие:

Код 5.1

Public Class Form1

Dim i As Short

Dim N(1) As TextBox

Dim R(1) As RadioButton

Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Load N(0) = t1 : N(1) = t2

R(0) = r1 : R(1) = r2 i = 0

R(0).Checked = True End Sub

Private Sub Clear_Click(ByVal _ sender As System.Object, _

ByVal e As System.EventArgs) Handles u1.Click N(0).Text = "" : N(1).Text = "" : t3.Text = ""

End Sub

Private Sub Back_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles u2.Click

Dim s As String s = N(i).Text

If Len(s) > 0 Then N(i).Text = _ Mid(s, 1, Len(s) - 1)

End Sub

Основная «изюминка» программы проекта данного приложения

– в использовании только одной процедуры для ввода любого из 14

61

символов – десяти цифр и четырёх других знаков. (Кнопки для ввода этих символов расположены в 1-м фрейме.) Также только одна процедура создаётся и для всех четырёх кнопок арифметических действий. Аналогично только одна процедура – для двух радиокнопок. Код 5.2 демонстрирует три указанные процедуры.

Код 5.2

Private Sub b_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles _ b0.Click, b1.Click, b2.Click, b3.Click, _ b4.Click, b5.Click, b6.Click, b7.Click, _ b8.Click, b9.Click, _

z1.Click, z2.Click, z3.Click, z4.Click N(i).Text = N(i).Text & sender.Text

End Sub

Private Sub D_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles _

d1.Click, d2.Click, d3.Click, d4.Click Dim n1, n2, Res As Double

If N(0).Text = "" Then N(0).Text = "0"

If N(1).Text = "" Then N(1).Text = "0"

n1 = CDbl(N(0).Text) : n2 = CDbl(N(1).Text) Select Case sender.Tag

Case 0 : Res = n1 + n2

Case 1 : Res = n1 - n2

Case 2 : Res = n1 * n2

Case 3 : Res = n1 / n2 End Select

t3.Text = Res

End Sub

Private Sub RadioButton_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles _ r1.Click, r2.Click

i = sender.Tag End Sub

Отметим важное обстоятельство: две последние процедуры используют свойство Tag объектов d1, d2, d3 и d4, а также объектов r1 и r2. Значения этого свойства должны быть установлены заранее на этапе проектирования формы.

62

Задание 5.2. Модернизировать проект Windows приложения «Калькулятор, управляемый мышью», заменив все кнопки на форме единственной кнопкой, нажатие которой вызывает появление кнопок приложения, построенного в результате выполнения зада-

ния 5.1.

Рассмотрим создание проекта приложения «Массив командных

кнопок», на панели которого после его старта – только одна командная кнопка и объект GroupBox. Щелчок этой кнопки вызывает

«рождение» и построение в строгом порядке тринадцати кнопок, предназначенных для вычисления соответствующих степеней введённого пользователем числа q.

Последовательное появление окон в процессе работы данного приложения показано на рис. 5.2–5.5.

Рис. 5.2. Окно приложения сразу после старта

Рис. 5.3. Окно ввода пользователем основания степени

63

Рис. 5.4. Окно приложения с автоматически созданными кнопками

Рис. 5.5. Окно сообщения после щелчка одной из «новых» кнопок

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

Код проекта приложения следующий:

Код 5.3

Public Class Form1

Dim WithEvents B0, B1, B2, B3, B4, B5, B6, B7, _ B8, B9, B10, B11, B12 As New Button

Dim C(,) As Button Const m As Integer = 3 Const n As Integer = 4 Const w As Integer = 128 Const h As Integer = 32 Const x0 As Integer = 32 Const y0 As Integer = 16 Const d As Integer = 8 Dim i, j, k As Integer Dim q As Double

Private Sub Form1_Load(ByVal sender As Object, _

64

ByVal e As System.EventArgs) Handles Me.Load GroupBox1.Width = d * (m + 1) + w * m GroupBox1.Height = d * (n + 5) + h * (n + 1) GroupBox1.Left = x0 : GroupBox1.Top = y0 Me.Width = GroupBox1.Width + 2 * x0 + d Me.Height = GroupBox1.Height + 4 * y0 + d

End Sub

Private Sub B_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) _

Handles B0.Click, B1.Click, B2.Click, _ B3.Click, B4.Click, B5.Click, B6.Click, _ B7.Click, B8.Click, B9.Click, B10.Click, _ B11.Click, B12.Click

MsgBox(q & "^" & sender.tag & " = " & _ q ^ sender.Tag, _

MsgBoxStyle.Information, "Вычисление степени числа") End Sub

Private Sub But1_Click(ByVal _ sender As System.Object, _

ByVal e As System.EventArgs) _ Handles Button1.Click

q = InputBox("Введите основание степени q", _ "q^k", "987654321")

B0.Width = w : B0.Height = h B0.Left = d + (w + d) B0.Top = 4 * d

B0.Text = q & "^" & 0 B0.Tag = 0 GroupBox1.Controls.Add(B0) ReDim C(m - 1, n - 1)

For j = 0 To n - 1 For i = 0 To m - 1

C(i, j) = New Button

C(i, j).Width = w : C(i, j).Height = h C(i, j).Left = d + i * (w + d)

C(i, j).Top = 4 * d + (j + 1) * (h + d) k = i + j * m + 1

C(i, j).Text = q & "^" & k C(i, j).Tag = k GroupBox1.Controls.Add(C(i, j))

Next

Next

B1 = C(0, 0) : B2 = C(1, 0) : B3 = C(2, 0) B4 = C(0, 1) : B5 = C(1, 1) : B6 = C(2, 1)

65

B7 = C(0, 2) : B8 = C(1, 2) : B9 = C(2, 2) B10 = C(0, 3) : B11 = C(1, 3) : B12 = C(2, 3) Button1.Visible = False

End Sub

End Class

Варианты задания 5.2. Оба варианта задания 5.2 должны использовать модернизированную форму приложения «Калькулятор», показанную на рис. 5.6.

Рис. 5.6. Приложение «Калькулятор» после запуска – перед созданием кнопок и других элементов управления

Вариант 1. Написать программный код – фрагмент процедуры щелчка кнопки, показанной на рис. 5.6. Щелчок кнопки должен вызывать автоматическое создание в первом фрейме 16 кнопок:

для ввода цифр от 0 до 9,

для ввода других знаков («,», «Е», «+», «-»),

кнопок управления Clear и Backspace. Результат показан на рис. 5.7.

Вариант 2. Написать программный код – как фрагмент проце-

дуры щелчка кнопки, показанной на рис. 5.6. Щелчок кнопки должен вызывать автоматическое создание во втором и в третьем фреймах текстовых полей (3 поля), радиокнопок (2 кнопки) и кнопок арифметических действий (4 кнопки). Результат показан на рис. 5.8.

66

Рис. 5.7. Приложение «Калькулятор» после щелчка единственной кнопки по варианту 1 задания 2

Рис. 5.8. Приложение «Калькулятор» после щелчка единственной кнопки по варианту 2 задания 2

Указания (к обоим вариантам).

1.Взять за основу выполнение задания 5.2, в котором рассматривается автоматическое создание во фрейме на экранной форме множества новых командных кнопок, каждая из которых должна решать собственную задачу.

2.Использовать код задания 5.1. В этот код следует внести объявление пока не существующих объектов на форме (код 5.4).

Следует обратить внимание на то, что для новых объектов в коде класса формы определены процедуры-события, поэтому при объ-

явлении этих объектов следует использовать ключевое слово

WithEvents.

67

Код 5.4

Dim WithEvents b0, b1, b2, b3, b4, _ b5, b6, b7, b8, b9, _

z1, z2, z3, z4, u1, u2, _ d1, d2, d3, d4 As New Button

Dim L As New Label

Dim WithEvents r1, r2 As New RadioButton Dim t1, t2, t3 As New TextBox

Dim i As Short

Dim N(1) As TextBox

Dim R(1) As RadioButton

3. Для выполнения каждого из двух вариантов можно воспользоваться частью приведенного ниже «объединенного» кода 5.5

для процедуры B_Click – щелчка кнопки с именем B.

Код 5.5

Private Sub B_Click(ByVal sender As _ System.Object, ByVal e As System.EventArgs) _ Handles B.Click

Dim w, h, p, x0, y0 As Integer

w = 56 : h = 24 : p = 5 : x0 = 10 : y0 = 20

b0.Left = x0

+

w + p : b0.Top = y0

b0.Width = w

:

b0.Height = h

: b0.Text = "0"

b1.Left = x0

:

b1.Top = y0 +

h + p

b1.Width = w

:

b1.Height = h

: b1.Text = "1"

b2.Left = x0

+

w + p : b2.Top = y0 + h + p

b2.Width = w

:

b2.Height = h

: b2.Text = "2"

b3.Left = x0

+

2 * (w + p)

 

b3.Top = y0 + h + p

 

b3.Width = w : b3.Height = h

: b3.Text = "3"

b4.Left = x0

: b4.Top = y0 +

2 * (h + p)

b4.Width = w

: b4.Height = h

: b4.Text = "4"

b5.Left = x0

+ w + p

 

b5.Top = y0 + 2 * (h + p)

 

b5.Width = w : b5.Height = h

: b5.Text = "5"

b6.Left = x0

+

2 * (w + p)

 

b6.Top = y0 + 2 * (h + p)

 

b6.Width = w : b6.Height = h

: b6.Text = "6"

b7.Left = x0 : b7.Top = y0 +

3 * (h + p)

b7.Width = w : b7.Height = h

: b7.Text = "7"

b8.Left = x0 + w + p

 

b8.Top = y0 + 3 * (h + p)

 

b8.Width = w : b8.Height = h

: b8.Text = "8"

b9.Left = x0 +

2 * (w + p)

 

b9.Top = y0 + 3 * (h + p)

68

b9.Width = w : b9.Height = h : b9.Text = "9" z1.Left = x0 + 3 * (w + p) + 4 * p

z1.Top = y0

z1.Width = w : z1.Height = h : z1.Text = "," z2.Left = x0 + 3 * (w + p) + 4 * p

z2.Top = y0 + h + p

z2.Width = w : z2.Height = h : z2.Text = "E" z3.Left = x0 + 3 * (w + p) + 4 * p

z3.Top = y0 + 2 * (h + p) z3.Width = w : z3.Height = h z3.Text = "+"

z4.Left = x0 + 3 * (w + p) + 4 * p z4.Top = y0 + 3 * (h + p)

z4.Width = w : z4.Height = h : z4.Text = "-" u1.Left = 3 * x0

u1.Top = 2 * y0 + 4 * (h + p) u1.Width = 2 * w

u1.Height = h : u1.Text = "Clear" u2.Left = 3 * x0 + 2 * w + p u2.Top = 2 * y0 + 4 * (h + p) u2.Width = 2 * w : u2.Height = h u2.Text = "Backspace" GroupBox1.Controls.Add(b0) GroupBox1.Controls.Add(b1) GroupBox1.Controls.Add(b2) GroupBox1.Controls.Add(b3) GroupBox1.Controls.Add(b4) GroupBox1.Controls.Add(b5) GroupBox1.Controls.Add(b6) GroupBox1.Controls.Add(b7) GroupBox1.Controls.Add(b8) GroupBox1.Controls.Add(b9) GroupBox1.Controls.Add(z1) GroupBox1.Controls.Add(z2) GroupBox1.Controls.Add(z3) GroupBox1.Controls.Add(z4) GroupBox1.Controls.Add(u1) GroupBox1.Controls.Add(u2) t1.Left = x0 : t1.Top = y0 t1.Width = 4 * w : t1.Height = h t1.BackColor = Color.Black t1.ForeColor = Color.LightGreen t2.Left = x0 : t2.Top = y0 + h + p t2.Width = 4 * w : t2.Height = h t2.BackColor = Color.Black t2.ForeColor = Color.LightGreen

t3.Left = x0 : t3.Top = y0 + 2 * (h + p)

69

t3.Width = 4 * w : t3.Height = h t3.BackColor = Color.Black t3.ForeColor = Color.LightGreen

t1.TextAlign = HorizontalAlignment.Right t2.TextAlign = HorizontalAlignment.Right t3.TextAlign = HorizontalAlignment.Right r1.Left = x0 + 4 * w + p : r1.Top = y0 r1.Width = w : r1.Height = h : r1.Text = "N1" r2.Left = x0 + 4 * w + p : r2.Top = y0 + h + p r2.Width = w : r2.Height = h : r2.Text = "N2" r1.Tag = 0 : r2.Tag = 1

L.Left = x0 + 4 * w + p L.Top = y0 + 2 * (h + p)

L.Width = 1.5 * w : L.Text = "Результат" GroupBox2.Controls.Add(t1) GroupBox2.Controls.Add(t2) GroupBox2.Controls.Add(t3) GroupBox2.Controls.Add(r1) GroupBox2.Controls.Add(r2) GroupBox2.Controls.Add(L)

d1.Left = 5 * x0 : d1.Top = y0 d1.Width = w : d1.Height = h d1.Text = "N1+N2"

d2.Left = 5 * x0 + w + p : d2.Top = y0 d2.Width = w : d2.Height = h

d2.Text = "N1-N2"

d3.Left = 5 * x0 + 2 * (w + p) : d3.Top = y0 d3.Width = w : d1.Height = h

d3.Text = "N1*N2"

d4.Left = 5 * x0 + 3 * (w + p) : d4.Top = y0 d4.Width = w : d2.Height = h

d4.Text = "N1/N2" d1.Tag = 0 : d2.Tag = 1 d3.Tag = 2 : d4.Tag = 3

GroupBox3.Controls.Add(d1)

GroupBox3.Controls.Add(d2)

GroupBox3.Controls.Add(d3)

GroupBox3.Controls.Add(d4) B.Visible = False Me.BackColor = _

Color.FromArgb(255, 200, 200, 200)

End Sub

Задание 5.3. Создать и отладить проект Windows приложения «Рисование шахматной доски».

Рассмотрим создание приложения «Шахматная доска».

70

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]