ПОНЯТНО О Visual Basic NET (том 3)


Бесконечность форм


Недоступные формы. Создайте проект. В режиме проектирования добавьте в проект еще одну форму (как это делается, написано в 21.2). Перечитайте также 21.7. На первую форму (Form1) поместите две кнопки. Введите в ее окно кода такой код:

Dim Ф As Form2

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Ф = New Form2

        Ф.Show()

End Sub

 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Ф.BackColor = Color.Green

End Sub

Запустите проект. Щелкните несколько раз по первой кнопке, а затем один раз – по второй. Вот что вы увидите (Рис. 27.3).

Рис. 27.3

С каждым щелчком по первой кнопке порождается и показывается на экране очередной объект – экземпляр класса Form2. Спрашивается: почему при щелчке по второй кнопке окрасился только последний экземпляр?

Дело вот в чем. Переменная Ф объявлена классом Form2, значит она имеет ссылочный тип. При первом щелчке по первой кнопке в памяти была создана большая область для объекта класса Form2, в которой предусмотрено место для хранения всех многочисленных свойств формы. Переменная же Ф получила значение ссылки на эту область. При втором щелчке в памяти была создана еще одна область для объекта класса Form2, а переменная Ф получила значение ссылки уже на эту новую область, потеряв, естественно, ссылку на старую. Очевидно, переменная Ф всегда ссылается только на последнюю созданную форму, поэтому при щелчке по второй кнопке обращается только к ней.

Поскольку ссылки на все формы, кроме последней, потеряны, то вы из кода никак не можете к ним обратиться и ничего не можете с ними сделать, даже закрыть. А вот вручную – пожалуйста! Таскайте мышкой, закрывайте и т.п.

Коллекция форм. Как исправить это положение? Пусть вам хочется управлять из кода всеми созданными формами. Создайте коллекцию и каждую созданную форму добавляйте в нее. Тогда к каждой форме можно обращаться, как к члену коллекции, по индексу. Вот код:




- Начало -  - Назад -  - Вперед -



Книжный магазин