Отследить наличие экземпляра MdiChildren

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Отследить наличие экземпляра MdiChildren

Сообщение dr.MIG » 09.02.2008 (Сб) 19:49

Как оптимальнее решить такую задачу? Есть MDI-форма. На ней есть некий TreeView при щелчке на его элементе создаётся новая форма следующим образом:
Код: Выделить всё

Dim frmChild As New frmJ()
frmChild.MdiParent = Me
frmChildShow()

Как сделать так, что бы при повторном щелчке на элементе TreeView при наличии открытой формы, соответствующей этому элементу, не создавалась новая форма, а активировалась бы уже созданная?
Salus populi suprema lex

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 10.02.2008 (Вс) 4:18

dr.MIG
Ввести общий флаг ExistsChild
В событие OnLoad frmChild устанавливает его, а в Close сбрасывает, тогда
Код: Выделить всё
Private frmChild As frmJ 'переменная в коде MDI-форме

'В коде при щелчке на TreeView
If ExistsChild Then
   '...
   frmChild.Activate
Else
   frmChild = New frmJ()
   '...
End If

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 10.02.2008 (Вс) 10:52

Можно поподробнее -- не очень понял как в коде MDI-формы флаг ExistsChild будет соотносится с конкретным экземпляром Child-формы... Общий флаг ExistsChild куда вынести? Ведь если его объявить в модуле MDI-формы, то это бессмысленно. Если в модуле frmJ, то в коде, в модуле MDI-формы его не видно. Поэтому, пожалуйста поподробнее -- где и как его объявить?
Salus populi suprema lex

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 10.02.2008 (Вс) 13:10

Я создавал метод

Private function GetMdiChild (frmText as string) as Form

End Function

в этом методе перебирал формы из свойства Me.MdiChildren


В моем случае я искал по тексту, ты можешь искать по чему-то другому

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 10.02.2008 (Вс) 17:40

Сделал так же... Просто думал, что есть какой-то более красивый способ. :)
Salus populi suprema lex

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Сообщение anvg » 10.02.2008 (Вс) 18:02

dr.MIG
В Вашем вопросе упоминалась единственная форма. Поэтому я и предложил флаг наличия дочерней форме, его достаточно объявить в MDI-форме с доступом Friend, чтобы он был виден из дочерней MyMDIform.ExistsChild. Можно даже и проще объявить frmChild доступ Friend. Тогда дочерняя форма при закрытии устанавливает ссылку в Nothing и проверка будет на Nothing.
Если с TreeView должно быть связано несколько дочерних форм (к сожалению, конкретно предложить, не зная ваших задач, что-то сложно) можно воспользоваться тем, что TreeNode имеет свойство Tag. Тогда можно будет использовать его в качестве определения наличия дочерней формы. Если Tag Is Nothing, то создать дочернюю форму, определив для неё конструктор, в котором передаётся ссылка на этот TreeNode, чтобы дочерняя форма при закрытии сбрасывала его в Nothing. Если же TreeNode.Tag IsNot Nothing, то приводим его к типу дочерней формы и делаем то, что нам нужно.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 1

    TopList  
cron