|
|
|
Классы и Public WithEvents
|
|||
|---|---|---|---|
|
#18+
Excel VBA Убедительно прошу помочь. Все что я мог сделал. Но квалифицированного советника у меня нет. Создал класс с именем OBFlexGrid В нем: Public WithEvents FlexBox As MSFlexGrid Public WithEvents Layer As MSForms.frame Public WithEvents Text_box As MSForms.TextBox Из этих трех объектов, при объявлении в Форме нового объекта OBFlexGrid методом этого класса Add создается элемент управления, которым можно управлять методами и свойствами, описанными в этом же классе. Все это работает. Но раз все WithEvents обьявлени как Public, то они видны извне. А когда их объявляю как Private, то оно ни видны в самом модуле класса. Что и как нужно сделать, чтобы извне виделись только мои методы и свойства? И вообще правилно ли это у меня организовано. На всякий случай приведу фрагмент кода в модуле класса OBFlexGrid. 'обявление и метод Add Option Explicit Public WithEvents FlexBox As MSFlexGrid Public WithEvents Layer As MSForms.frame Public WithEvents Text_box As MSForms.TextBox Public FlexGROUP As New OBFlexGrid Public Sub Add(Form As Object, Left As Integer, Top As Integer, Width As Integer, Height As Integer) With Form Set FlexGROUP.FlexBox = .Controls.Add("MSFlexGridLib.MSFlexGrid.1") Set FlexGROUP.Layer = .Controls.Add("Forms.Frame.1") Set FlexGROUP.Text_box = FlexGROUP.Layer.Controls.Add("Forms.TextBox.1") FlexGROUP.Layer.BackColor = &HC0FFFF FlexGROUP.Text_box.BackColor = &HC0FFFF FlexGROUP.Text_box.SpecialEffect = fmSpecialEffectFlat FlexGROUP.Layer.SpecialEffect = fmSpecialEffectFlat FlexGROUP.Text_box.Top = -0.5 FlexGROUP.Text_box.Left = -2.5 FlexGROUP.Layer.Visible = False FlexGROUP.FlexBox.BackColorSel = &HFF8080 FlexGROUP.FlexBox.Left = Left FlexGROUP.FlexBox.Top = Top FlexGROUP.FlexBox.Width = Width FlexGROUP.FlexBox.Height = Height FlexGROUP.FlexBox.AllowUserResizing = flexResizeColumns End With End Sub И далее остатние методы и свойства… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2006, 11:04:12 |
|
||
|
Классы и Public WithEvents
|
|||
|---|---|---|---|
|
#18+
Не совсем понятна цель сего, и в каких модулях что находится. Попробую ответить основываясь на своих догадках. 1. Если ваш класс создается для динамической подгрузки контролов и их отображения, то доступ к переменным ссылающимся на контролы надо ограничить с помощью свойств. Код: plaintext 1. 2. 3. 4. Set FlexGROUP.Text_box = Me.Layer.Controls.Add("Forms.TextBox.1") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 09:00:06 |
|
||
|
Классы и Public WithEvents
|
|||
|---|---|---|---|
|
#18+
Worobjoff2. Объявление FlexGROUP: Вы ссылаетесь на имя переменной из модуля класса. Это делать нельзя. Не получится. Надо так: Set FlexGROUP.Text_box = Me.Layer.Controls.Add("Forms.TextBox.1")Ну вот сам же и сделал описку: Set Me.Text_box = Me.Layer.Controls.Add("Forms.TextBox.1") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 09:01:50 |
|
||
|
Классы и Public WithEvents
|
|||
|---|---|---|---|
|
#18+
Да, и еще: Если вы все же сделаете с помощью свойств эти контролы "ReadOnly", то устанавливать ссылку надо будет пользуясь именем переменной а не свойства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2006, 09:07:02 |
|
||
|
|

start [/forum/topic.php?fid=60&tid=2166393]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
183ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 461ms |

| 0 / 0 |
