Нельзя ли попроще???

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Нельзя ли попроще???

Сообщение newonline » 21.08.2005 (Вс) 17:32

У меня в проге одновременно загружено множество экземпляров формы-эталона. При наступлении определенного события необходимо запретить использовать одно из кнопок - разумеется на каждом экземпляре.
Я сделал так:
:(
Dim Ctrl As Control
Dim frm As Form

For Each frm In Forms
For Each Ctrl In frm.Controls
If CStr(Ctrl.Name) = "ИмяТойСамойКнопки" Then
Ctrl.Enabled = False
End If
Next
Next

Не слишком ли загонно? Може есть путь попроще? :?: :roll:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.08.2005 (Вс) 17:34

И при наступлении какого же события?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 21.08.2005 (Вс) 18:14

Вообщем каждая такая форма - это хранилище данных в виде таблицы.
На этой форме есть кнопка (та самая!) которая инициализирует создание нового экземпляра этой же формы:

Dim frmData As frmData
Set frmData = New frmData

Количество таких форм не должно превышать заданного значения (например: 6). Как только будет создан 6-ой экземпляр (включая и саму форму-шаблон), то и наступает это событие и необходимо заблокировать все 6 экземпляров кнопок на каждой форме. Вот. :?
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 21.08.2005 (Вс) 18:15

Код: Выделить всё
For Each frm In Forms
  frm.имятойсамойкнопки.Enabled = False
Next

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 21.08.2005 (Вс) 18:29

Вообщем не знает ( или неподдерживает он такой метод или свойство)
Вот что я ему написал:

For Each frm In Forms
frm.cmdNewDataForm.Enabled = False

'For Each Ctrl In frm.Controls
'If CStr(Ctrl.Name) = "cmdNewDataForm" Then
'Ctrl.Enabled = False
'End If
'Next

Next

А он ошибки швыряет Runtime 438 Вообщем не знает ( или неподдерживает он такой метод или свойство)

Что не так... :?: :o
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 21.08.2005 (Вс) 18:33

newonline
А у тебя, случайно, не попадаются формы другого типа, на которых НЕТ этой кнопки?

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 21.08.2005 (Вс) 18:37

Да, по-видимому попадается. Должно быть это головная MDI форма приложения. У нее нет этой кнопки. :o
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 21.08.2005 (Вс) 18:38

Тогда так:

For Each frm In Forms
if frm.name<>"frmMdiMain" then frm.имятойсамойкнопки.Enabled = False
Next

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 21.08.2005 (Вс) 18:47

Простите неуча. :oops:
Спасибо, ребята. Работает.
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 21.08.2005 (Вс) 18:47

Создай форму с кнопкой Command1 и с таким кодом:
Код: Выделить всё
Option Explicit

Private Sub Command1_Click()
  NewForm
End Sub


и такой модуль:
Код: Выделить всё
Option Explicit

Dim f(3) As Form
Public frmCnt As Long

Sub Main()
  Set f(0) = New frmMain
  frmCnt = 1
  f(0).Show
End Sub

Public Sub DisableAll()
Dim frm As Form
  For Each frm In Forms
    frm.Command1.Enabled = False
  Next
End Sub

Public Sub NewForm()
  Set f(frmCnt) = New frmMain
  f(frmCnt).Show
  frmCnt = frmCnt + 1
  If frmCnt = 4 Then DisableAll
End Sub


Project\StartUp - Sub Main.
Все работает.

newonline
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 115
Зарегистрирован: 13.08.2005 (Сб) 14:50
Откуда: Воронеж

Сообщение newonline » 21.08.2005 (Вс) 18:50

Да. предыдущий вариант проще и грамотно. Спасибо.
if frm.name<>"frmMdiMain" then frm.имятойсамойкнопки.Enabled = False :wink:
Оно конечно да, ежели что как...а то ведь как получится, так вот вам и пожалуйста...


Вернуться в Visual Basic 1–6

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

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

    TopList