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
Støv, fibre og metalliske partikler kan påvirke både uptime, levetid og driftssikkerhed. Derfor arbejder flere datacentre systematisk med contamination control.
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.