powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Может ли UserControl реализовать интерфейс ?
9 сообщений из 9, страница 1 из 1
Может ли UserControl реализовать интерфейс ?
    #33823594
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал реализовать интерфейс класса в UserControl.
Интерфейс имплементируется, свойтсва определяются, но обратиться к UserControl как к объекту имплементированного класса не получается. Генерируется ошибка.
Может я не знаю о какой-л. настройке UserControl для этого ?
Или реализовывать интерфейсы UserControl в VB6 не может ?
...
Рейтинг: 0 / 0
Может ли UserControl реализовать интерфейс ?
    #33823615
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код в студию! (С)

Можно кусочек с примером
...
Рейтинг: 0 / 0
Может ли UserControl реализовать интерфейс ?
    #33823672
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffИли реализовывать интерфейсы UserControl в VB6 не может ? Может. Покажите код.
...
Рейтинг: 0 / 0
Может ли UserControl реализовать интерфейс ?
    #33823725
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю примерно следующее:
Class1:
Код: plaintext
public ID as Long
UserControl1:
Код: plaintext
1.
2.
3.
Public Property get ID as Long
  '...
end Property
'...
Form1:
Код: plaintext
1.
2.
3.
Private Sub Form_Load
  Dim Obj as Class1
  Set Obj = Me.UserControl11  'Здесь - ошибка !
End sub
...
Рейтинг: 0 / 0
Может ли UserControl реализовать интерфейс ?
    #33823954
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffДелаю примерно следующее: Не увидел имплементации интерфейса. Вот пример из живого проекта
Код: plaintext
1.
2.
3.
4.
5.
6.
'В классе iControl
Option Explicit

Public Function InitializeControl() As Boolean

End Function
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
'В контроле
Option Explicit

Implements iControl

Private Function iControl_InitializeControl() As Boolean
    On Error GoTo err_proc

'тут имплементация

    Exit Function
err_proc:
    l_Error.ShowError "AddressEditor.iControl_InitializeControl"
End Function
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
'Пример использования
For Each obControl In obControlCollection
                 
On Error Resume Next
        Set obControlObject = obControl.object
On Error GoTo err_proc

        If Not obControlObject Is Nothing Then
            If TypeOf obControlObject Is iControl Then
                
                Set obUserControl = obControlObject
                obUserControl.InitializeControl
            End If
        End If
        Set obControlObject = Nothing
        Set obUserControl = Nothing
    Next
...
Рейтинг: 0 / 0
Может ли UserControl реализовать интерфейс ?
    #33824128
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Если в приведенном мною примере я напишу:
Код: plaintext
1.
2.
3.
Dim uc as UserControl1
set uc = Me.UserControl11
Dim Obj as Class1
Set Obj = uc
То это работает.
Но я не могу написать так:
Код: plaintext
1.
2.
3.
Dim c as Control
set c = Me.UserControl11
Dim Obj as Class1
Set Obj = uc

Задача стоит так:
Есть класс биндинг-коллекция связывания полей объекта с контроломамя на форме.
В ней есть набор классов для связывания со стандартными контролами VB.
И еще с несколькими UserControl-ами.
Надо внедрить интерфейс для того чтобы биндинг-коллекция не "знала" ничего о UserControl-ах, а лишь об этом интерфейсе.
Это надо чтобы избавить биндинг-коллекцию от привязки к конкретному проекту.
...
Рейтинг: 0 / 0
Может ли UserControl реализовать интерфейс ?
    #33824196
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Новый проект, новый UserControl, Новый класс.
В классе Class1
Код: plaintext
1.
2.
3.
4.
5.
Option Explicit

Public Function Test() As Boolean
    
End Function
В контроле
Код: plaintext
1.
2.
3.
4.
5.
6.
Option Explicit

Implements Class1

Private Function Class1_Test() As Boolean
    Class1_Test = True
End Function
На форму добавьте кнопку, UserControl1 и скопируйте следующий код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Option Explicit

Private Sub Command1_Click()
    Dim c As Class1
    Dim control As control
    For Each control In Me.Controls
        If TypeOf control.object Is Class1 Then
            MsgBox "Class1"
        End If
    Next
End Sub
Обратите внимание на выделенную строку. В ней один раз возникнет ошибка. Именно поэтому в приведенном мной рабочем примере есть On Error Resume Next
...
Рейтинг: 0 / 0
Может ли UserControl реализовать интерфейс ?
    #33824306
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот эта запись
Код: plaintext
If TypeOf c.Object Is Class1 Then
(правда я не знаю такого синтаксиса c.Object) и есть ответ на мой вопрос!
Спасибо, Alexey
И, если не трудно, разъясните назначение такой записи:
c.Object
...
Рейтинг: 0 / 0
Может ли UserControl реализовать интерфейс ?
    #33824351
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffИ, если не трудно, разъясните назначение такой записи:
c.Object ЕМНИП это by design. Класс Control невозможно напрямую откастовать к UserControl (и соответственно к его интерфейсам).
Только через Control.Object

Однако не у всех Control этот Object есть.
В приведенном выше примере когда foreach доходил до кнопки, возникала ошибка.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Может ли UserControl реализовать интерфейс ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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