Hallo,
ich habe eine dumme anfängerfrage: In meinem Lehrbuch steht, dass man, wenn man die eigenschaft eines objektes auslesen will, eine Variable deklarieren muss und dann mit einem Punkt dahinter den eingeschaftsnamen setzen muss um es abzufragen, also z. B.
Dim oObjektBeispiel As New ObjektBeispiel
Label1.Text = oObjektBeispiel.BeispielTextEigenschaft()
Das habe ich brav in meinem Programm (es ist mein erstes "eigenständig" programmiertes Programm mit einem Objekt, ein einfaches Star-Trek-Quiz) gemacht. Beim Programmstart drücke ich auf meinen Start-Button, und das Frage-Label und der Text der RadioButtons verschwinden. Ich weiß nicht, was ich falsch gemacht habe. Im Code der Klassendatei mit dem Objekt ist nur bei jeder Eigenschaft das "End Get" grün unterkringelt und es heißt: "Von der Eigenschaft "Question" wird nicht in allen Codepfaden ein Wert zurückgegeben. WEnn das Ergebnis verwendet wird, kann zur Laufzeit eine NULL-Verweisaufnahme erfolgen". Ich schätze, daran wird es liegen, aber ich weiß nicht, wie ich das beheben kann. Ich habe sogar einmal folgendes gemacht:
Trozdem erhielt ich beim Ausführen nur ein leeres Textfeld und die Unterkringelung blieb.
Hier ist der ganze Programmcode:
Spoiler anzeigen
Die Objekt-Datei
Und hier der Code des Formulars:
Wenn mir jemand sagen könnte, was ich falsch gemacht habe, wäre ich ihm sehr dankbar.
MfG Capus
ich habe eine dumme anfängerfrage: In meinem Lehrbuch steht, dass man, wenn man die eigenschaft eines objektes auslesen will, eine Variable deklarieren muss und dann mit einem Punkt dahinter den eingeschaftsnamen setzen muss um es abzufragen, also z. B.
Dim oObjektBeispiel As New ObjektBeispiel
Label1.Text = oObjektBeispiel.BeispielTextEigenschaft()
Das habe ich brav in meinem Programm (es ist mein erstes "eigenständig" programmiertes Programm mit einem Objekt, ein einfaches Star-Trek-Quiz) gemacht. Beim Programmstart drücke ich auf meinen Start-Button, und das Frage-Label und der Text der RadioButtons verschwinden. Ich weiß nicht, was ich falsch gemacht habe. Im Code der Klassendatei mit dem Objekt ist nur bei jeder Eigenschaft das "End Get" grün unterkringelt und es heißt: "Von der Eigenschaft "Question" wird nicht in allen Codepfaden ein Wert zurückgegeben. WEnn das Ergebnis verwendet wird, kann zur Laufzeit eine NULL-Verweisaufnahme erfolgen". Ich schätze, daran wird es liegen, aber ich weiß nicht, wie ich das beheben kann. Ich habe sogar einmal folgendes gemacht:
Trozdem erhielt ich beim Ausführen nur ein leeres Textfeld und die Unterkringelung blieb.
Hier ist der ganze Programmcode:
Die Objekt-Datei
Quellcode
- Public Class StarTrek
- Dim vQuestion As String
- Dim vOptionA, vOptionB, vOptionC, vOptionD As String
- Dim vRightAnswer As String
- Dim rdmArray As New Random
- 'Fragen-Arrays
- Dim CaptainEnterpriseD(5) As String
- Dim ReiseVoyager(5) As String
- Dim RangWesleyCrusher(5) As String
- Dim SpeziesNeelix(5) As String
- Public Property Question() As String
- Get
- Question() = "Test"
- End Get
- Set(ByVal value As String)
- vQuestion = value
- End Set
- End Property
- Public Property OptionA() As String
- Get
- OptionA() = vOptionA
- End Get
- Set(ByVal value As String)
- vOptionA = value
- End Set
- End Property
- Public Property OptionB() As String
- Get
- OptionB() = vOptionB
- End Get
- Set(ByVal value As String)
- vOptionB = value
- End Set
- End Property
- Public Property OptionC() As String
- Get
- OptionC() = vOptionC
- End Get
- Set(ByVal value As String)
- vOptionC = value
- End Set
- End Property
- Public Property OptionD() As String
- Get
- OptionD() = vOptionD
- End Get
- Set(ByVal value As String)
- vOptionD = value
- End Set
- End Property
- Public Property RightAnswer() As String
- Get
- RightAnswer() = vRightAnswer
- End Get
- Set(ByVal value As String)
- vRightAnswer = value
- End Set
- End Property
- Public Sub Deklaration()
- 'Hier werden die Arrays deklariert. Diese Funktion muss vor dem Benutzen des Fragebogens ausgeführt werden. (ich hab hier nicht alle reinkopiert, nur ein paar als beispiel).
- CaptainEnterpriseD(0) = "Wer ist der Captain der USS Enterprise D?"
- CaptainEnterpriseD(1) = "A: Captain Janeway"
- CaptainEnterpriseD(2) = "B: Captain Picard"
- CaptainEnterpriseD(3) = "C: Captain Kirk"
- CaptainEnterpriseD(4) = "D: Captain Spock"
- CaptainEnterpriseD(5) = "B"
- ReiseVoyager(0) = "Wie lange dauerte die Reise der USS Voyager?"
- ReiseVoyager(1) = "A: 5 Jahre"
- ReiseVoyager(2) = "B: 3 Wochen"
- ReiseVoyager(3) = "C: 17 Jahre"
- ReiseVoyager(4) = "D: 7 Jahre"
- ReiseVoyager(5) = "D"
- RangWesleyCrusher(0) = "Welchen Rang hatte Wesley Crusher inne, als er an Bord der USS Enterprise D diente?"
- RangWesleyCrusher(1) = "A: Crewman"
- RangWesleyCrusher(2) = "B: Chief Petty Officer"
- RangWesleyCrusher(3) = "C: Fähnrich"
- RangWesleyCrusher(4) = "D: Captain"
- RangWesleyCrusher(5) = "C"
- End Sub
- Public Sub Datenauswahl()
- 'Deklaration der Arrays
- Call Deklaration()
- 'Hier werden den Variablen der Eigenschaften die Arrays mit den Strings mit Fragen und Antwortmöglichkeiten zugewiesen. Ich wollte die hier nicht alle reinkopieren, deshalb hab ich hier exemplarisch ein paar (die, die zu der Deklaration oben gehören):
- Dim WhichData As Integer
- WhichData = rdmArray.Next(4)
- If WhichData = 0 Then
- vQuestion = CaptainEnterpriseD(0)
- vOptionA = CaptainEnterpriseD(1)
- vOptionB = CaptainEnterpriseD(2)
- vOptionC = CaptainEnterpriseD(3)
- vOptionD = CaptainEnterpriseD(4)
- vRightAnswer = CaptainEnterpriseD(5)
- End If
- If WhichData = 1 Then
- vQuestion = ReiseVoyager(0)
- vOptionA = ReiseVoyager(1)
- vOptionB = ReiseVoyager(2)
- vOptionC = ReiseVoyager(3)
- vOptionD = ReiseVoyager(4)
- vRightAnswer = ReiseVoyager(5)
- End If
- If WhichData = 2 Then
- vQuestion = RangWesleyCrusher(0)
- vOptionA = RangWesleyCrusher(1)
- vOptionB = RangWesleyCrusher(2)
- vOptionC = RangWesleyCrusher(3)
- vOptionD = RangWesleyCrusher(4)
- vRightAnswer = RangWesleyCrusher(5)
- End If
- 'Ja, ich weiß, natürlich ist diese Lösung sehr provisorisch, aber sie müsste eig. auch funktionieren.
- End Sub
- End Class
Und hier der Code des Formulars:
Quellcode
- Public Class frmHaupt
- Dim oStarTrek As New StarTrek
- Dim blnAnswerRight As Boolean
- Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
- 'Generierung der Frage, Bereitschaft zur Ergebniseingabe
- btnStart.Enabled() = False
- 'Hier werden die Daten der Frage, die zufällig aufgerufen wurde, abgefragt.
- Call oStarTrek.Deklaration()
- Call oStarTrek.Datenauswahl()
- lblQuestion.Text = oStarTrek.Question()
- radOptionA.Text = oStarTrek.OptionA()
- radOptionB.Text = oStarTrek.OptionB()
- radOptionC.Text = oStarTrek.OptionC()
- radOptionD.Text = oStarTrek.OptionD()
- End Sub
- Private Sub CheckTheAnswer()
- 'Überprüfung der ausgewählten Daten
- If oStarTrek.RightAnswer() = "A" Then
- If radOptionA.Checked = True Then
- blnAnswerRight = True
- End If
- If radOptionA.Checked = False Then
- blnAnswerRight = False
- End If
- End If
- If oStarTrek.RightAnswer() = "B" Then
- If radOptionB.Checked = True Then
- blnAnswerRight = True
- End If
- If radOptionB.Checked = False Then
- blnAnswerRight = False
- End If
- End If
- If oStarTrek.RightAnswer() = "C" Then
- If radOptionC.Checked = True Then
- blnAnswerRight = True
- End If
- If radOptionC.Checked = False Then
- blnAnswerRight = False
- End If
- End If
- If oStarTrek.RightAnswer() = "D" Then
- If radOptionD.Checked = True Then
- blnAnswerRight = True
- End If
- If radOptionD.Checked = False Then
- blnAnswerRight = False
- End If
- End If
- End Sub
- Private Sub btnBestaetigen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBestaetigen.Click
- Call CheckTheAnswer()
- End Sub
- Noch ein paar unwichtige Prozeduren um dem benutzer zu sagen,
- End Class
Wenn mir jemand sagen könnte, was ich falsch gemacht habe, wäre ich ihm sehr dankbar.
MfG Capus