19. august 2004 - 16:48Der er
6 kommentarer og 1 løsning
lidt hjælp:)
hvad er der galt med koden her? hvorfor kan jeg ikke udrage me.text?
Dim x As New test(Me.text) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load x.tester() End Sub Public Class test Private name As String Public Sub New(ByVal name As String) Me.name = name End Sub Public Sub tester() MsgBox(name) End Sub End Class End Class
Dim x As test(Me.text) ' <---- IKKE New Private Sub Form1_Load(...) Handles MyBase.Load x = New test(Me.Text) ' <----- Den glemte linie ;) x.tester() End Sub
Public Class test Private name As String Public Sub New(ByVal name As String) Me.name = name End Sub
Public Sub tester() MsgBox(name) End Sub End Class
x er en variabel på modul niveau, dvs. den bliver lavet samtidig med din form. Når du så laver:
Dim x As New Test(...)
så bliver x ikke bare erklæret men også instantieret. Og siden det sker *før* din kode i formens constructor kaldes, så er formens Text-property stadig ikke sat (det sker først i InitializeComponent. Check selv det kode som designeren skjuler, du kan se at formens Text property på et tidspunkt bliver sat.
Ved at 'nøjes' med flg:
Dim x As Test
så er x erklæret med stadig null/nothing. Når du så i Form_Load eller i formens constructor *efter* kaldet til InitializeComponent laver en instans af klassen, så har din form fået sin Text property sat.
Hvis det stadig er lidt sort, så sæt et breakpoint i InitializeComponent og et i Test klassens constructor.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.