2012-06-20 3 views
0

Я недавно преобразовать свой проект из VB6 в VB.NET2008, после обращенного здесь есть саб, которые контролируют форму из модуля, который я создаю, ошибка была что-то вродеVB.NET формы управления от модуля

"cmdAdd не является членом System.Windows.Forms.Form"

Public Sub ButtonSet(ByRef frmObj As System.Windows.Forms.Form) 
    frmObj.cmdAdd.Visible = True 
    frmObj.cmdCopy.Visible = True 
    frmObj.cmdEdit.Visible = True 
    frmObj.cmdCorrection.Visible = True 
End Sub 

как его вызов:

Private Sub frmAPNote_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load 
ButtonSet(Me) 
End Sub 

ответ

1

Измените тип параметра на YourFormName.

Public Sub ButtonSet(ByRef frmObj As frmAPNote) 
    frmObj.cmdAdd.Visible = True 
    frmObj.cmdCopy.Visible = True 
    frmObj.cmdEdit.Visible = True 
    frmObj.cmdCorrection.Visible = True 
End Sub 

PS: Нет необходимости указывать тип параметра ByRef для объектов.

Проблема заключается в суб в модуле не только называют «frmAPNote», но и другие формы, такие как «frmARNote» и «frmRTNote»

Вы можете получить ссылку определенного контроля от Form.Controls коллекция.

Public Sub ButtonSet(ByVal frmObj As Form) 
    Dim btnAdd = frmObj.Controls("btnAdd") 

    If Not IsNothing(btnAdd) Then 
     btnAdd.Visible = False 
    End If 

    .... 
End Sub 
+0

Проблема заключается в суб в модуле не только называют «frmAPNote», но и другие формы, такие как «frmARNote» и «frmRTNote». –

+0

@monaz g: Затем создайте базовый класс или интерфейс, который все они используют, затем используйте это как тип. – jmoreno

+0

Привет jmoreno, это то, что я пытаюсь сделать с этим sub, можете ли вы привести пример, как это сделать, используя «базовый класс или интерфейс»? –

Смежные вопросы