2013-08-26 6 views
1

Я хочу использовать InitializeComponent(), когда создаю настраиваемый элемент управления (чтобы все было инициализировано до его использования), но компилятор говорит, что он не объявлен. Но мой Designer.vb содержит подкатегорию:vb.net InitializeComponent() не объявлен

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() 

со всеми новыми экземплярами, которые я создал.

Почему я не могу это назвать?

редактировать это, как я называю InitizialeComponent:

Public Class CustomControlsTextBox : Inherits TextBox 
Public Sub New() 
    MyBase.New() 
    InitizialeComponent() 'this function is not declared 
End Sub 
End Class 
+0

'Private Sub' означает, что он недоступен из-за пределов класса. http://msdn.microsoft.com/en-us/library/76453kax.aspx –

+0

Вы пытаетесь вызвать его из другого места? (обратите внимание, что это 'Private'). Вы должны полагаться на конструкторы. – SLaks

+0

спасибо, я думаю, что это не проблема. Прежде чем я спросил здесь, я также попробовал его с публичным подпунктом. Может кто-нибудь может опубликовать пример того, как он/она будет использовать этот суб :) – MaBi

ответ

0

Вы не должны зависеть от вашего InitializeComponent Designer.vb в. Скорее всего, создать новый конструктор в вашем Form1 который будет вызывать InitializeComponent()

Например:

Public Class Form1 

    Public Sub New() 
     ' This call is required by the designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 
     'Type all your code here! This code will be executed before the "FormLoad" if you call your new form 
    End Sub 
End Class 

Теперь, когда мы используем следующий код:

Dim NewFrm1 As New Form1 

New конструктор в Form1 будет называться.

2

InitializeComponent() является закрытым и может быть вызван только изнутри этого класса. Она вызывается по умолчанию в конструкторе UserControl, как это:

Public Sub New() 

    ' This call is required by the designer. 
    InitializeComponent() 

    ' Add any initialization after the InitializeComponent() call. 

End Sub 

Обратите внимание, что у вас будет только позвонить InitializeComponent() самостоятельно, если перегрузить конструктор. Конструктор по умолчанию делает это сам по себе.

+0

«Обратите внимание, что вам нужно будет только вызвать InitializeComponent(), если вы перегрузите конструктор. Конструктор по умолчанию делает это сам». Это очень полезная информация, спасибо! Я обновил свой вопрос и разместил код, как я его использую. – MaBi

+0

Это означает, что мне не нужно называть это в моем примере. Исправьте меня, если я ошибаюсь :) – MaBi

+0

@MaBi mybase.new обычно не требуется, за исключением особых событий (т. Е. Конструктор элемента управления, наследуемого для параметра, требует параметра). InitializeComponent() не требуется, если вам не нужно что-то делать внутри конструктора (кроме вызова InitializeComponent()). В вашем примере, поскольку вы ничего не делаете, вам не нужно даже перегружать конструктор. Вы можете удалить его, если хотите. Только если вы добавите что-то в конструктор, вам нужно будет вызвать InitializeComponent(). – MACN

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