Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как передать правильно форму в процедуру? / 9 сообщений из 9, страница 1 из 1
05.08.2009, 15:17
    #36127955
timursmeta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать правильно форму в процедуру?
Приветствую Вас знатоки!
Помогите решить на первый взгляд элементарную проблему.
Приведенный код ниже выдает ошибку при выполнении. "свойство или метод Height не поддерживается". Не пойму как такое возможно? Помогите пожалуйста.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Sub DoStart(byVal DocType as Integer)
  if DocType =  1  then
    CustomizeForm UserForm1
  else
    CustomizeForm UserForm2
  endif
End Sub

Sub CustomizeForm(aUsForm As UserForm)
Dim aDeltaForm As Integer 

  aDeltaForm = GetSystemMetrics(SM_CYCAPTION) +  2 
  
  If CellsValue = "1" Then
    With aUsForm      
      .OptionButton2.Value = True
      .OptionButton1.Enabled = False
      .OptionButton2.Enabled = False
      .LabelProgress.Height =  50 

      .Height = .LabelProgress.Top + .LabelProgress.Height + aDeltaForm 'Ошибку выдает тут. Что не нравится ему?
      
    End With
  End If

End Sub
...
Рейтинг: 0 / 0
05.08.2009, 15:54
    #36128109
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать правильно форму в процедуру?
> Автор: timursmeta
> Приветствую Вас знатоки!
> Помогите решить на первый взгляд элементарную проблему.
> Приведенный код ниже выдает ошибку при выполнении. "свойство или метод Height не поддерживается". Не пойму как
> такое возможно? Помогите пожалуйста.

Да вроде все нормально, можно попробовать перенести функцию CustomizeForm в саму форму и вызывать её от имени формы,
параметром передавая CellsValue


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.08.2009, 15:56
    #36128115
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать правильно форму в процедуру?
> Автор: timursmeta

Да и ещё
Код: plaintext
Declare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Long) As Long
и соответственно переменны не Integer, а Long


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.08.2009, 16:17
    #36128192
timursmeta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать правильно форму в процедуру?
Игорь Горбонос
Да и ещё

Declare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Long) As Long

и соответственно переменны не Integer, а Long

Это вы верно заметили, но на результат ни как не повлияет ))

Игорь Горбонос
Да вроде все нормально, можно попробовать перенести функцию CustomizeForm в саму форму и вызывать её от имени формы

В том то и дело, что так работает(UserForm1.Height = 50)...
Cуть заключается в том, что процедура CustomizeForm одинаковая для всех форм, а форм много и меняться эта процедура будет частенько, а так подправил в одном месте и красота )))
И читаемость кода повышается...

Хочу заметить, что свойства(Caption, Value, Top и другие) элементам управления на форме проставляется верно, а вот форме ширину и высоту не хочет менять.
...
Рейтинг: 0 / 0
05.08.2009, 16:21
    #36128208
timursmeta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать правильно форму в процедуру?
Прикрепляю файлик для истенных гурманов, в нем и приведен этот несчастный пример. Обработчик висит на Worksheet_SelectionChange
...
Рейтинг: 0 / 0
05.08.2009, 17:12
    #36128390
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать правильно форму в процедуру?
> Автор: timursmeta

Наверное никак, потому, что у класса MSForms.UserForm нет публичных свойств на изменение высоты формы. Они есть у самой
формы, но если посмотреть в Object Browser'e то можно увидеть у UserForm1:
Object BrowserProperty Height As Single
Member of Unknown24._Form

Поэтому, я бы сделал бы отдельный класс, свойство Instancing - 2(PublicNotCreatable)(это для того, что-бы не забыть и не
удалить реализацию)
Код: plaintext
1.
2.
3.
Option Explicit

Public Sub CustomizeForm()
End Sub
и в каждой форме после Option Explicit добавил Implements "имя класса"
и и определил-бы содержимое метода для каждой формы свое


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.08.2009, 17:24
    #36128441
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать правильно форму в процедуру?
timursmeta,

найдите 1 отличие
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub CustomizeForm(ByRef aUsForm)


    With aUsForm
      .CheckBox1.Caption = "Test"

      .Height = .CheckBox1.Top +  50 
      
    End With

End Sub
...
Рейтинг: 0 / 0
05.08.2009, 17:41
    #36128511
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать правильно форму в процедуру?
> Автор: big-duke
> найдите 1 отличие

Снимаю шляпу


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
05.08.2009, 17:42
    #36128516
timursmeta
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как передать правильно форму в процедуру?
Спасибо большое за помощь, я что вроде того и сделал!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как передать правильно форму в процедуру? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]