Objekt-Eigenschaft auslesen

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Capus.

    Objekt-Eigenschaft auslesen

    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:

    Quellcode

    1. Public Property Question() As String
    2. Get
    3. vQuestion = "Test"
    4. Question() = vQuestion
    5. End Get
    6. Set(ByVal value As String)
    7. vQuestion = value
    8. End Set
    9. End Property


    Trozdem erhielt ich beim Ausführen nur ein leeres Textfeld und die Unterkringelung blieb.

    Hier ist der ganze Programmcode:

    Spoiler anzeigen

    Die Objekt-Datei

    Quellcode

    1. Public Class StarTrek
    2. Dim vQuestion As String
    3. Dim vOptionA, vOptionB, vOptionC, vOptionD As String
    4. Dim vRightAnswer As String
    5. Dim rdmArray As New Random
    6. 'Fragen-Arrays
    7. Dim CaptainEnterpriseD(5) As String
    8. Dim ReiseVoyager(5) As String
    9. Dim RangWesleyCrusher(5) As String
    10. Dim SpeziesNeelix(5) As String
    11. Public Property Question() As String
    12. Get
    13. Question() = "Test"
    14. End Get
    15. Set(ByVal value As String)
    16. vQuestion = value
    17. End Set
    18. End Property
    19. Public Property OptionA() As String
    20. Get
    21. OptionA() = vOptionA
    22. End Get
    23. Set(ByVal value As String)
    24. vOptionA = value
    25. End Set
    26. End Property
    27. Public Property OptionB() As String
    28. Get
    29. OptionB() = vOptionB
    30. End Get
    31. Set(ByVal value As String)
    32. vOptionB = value
    33. End Set
    34. End Property
    35. Public Property OptionC() As String
    36. Get
    37. OptionC() = vOptionC
    38. End Get
    39. Set(ByVal value As String)
    40. vOptionC = value
    41. End Set
    42. End Property
    43. Public Property OptionD() As String
    44. Get
    45. OptionD() = vOptionD
    46. End Get
    47. Set(ByVal value As String)
    48. vOptionD = value
    49. End Set
    50. End Property
    51. Public Property RightAnswer() As String
    52. Get
    53. RightAnswer() = vRightAnswer
    54. End Get
    55. Set(ByVal value As String)
    56. vRightAnswer = value
    57. End Set
    58. End Property
    59. Public Sub Deklaration()
    60. '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).
    61. CaptainEnterpriseD(0) = "Wer ist der Captain der USS Enterprise D?"
    62. CaptainEnterpriseD(1) = "A: Captain Janeway"
    63. CaptainEnterpriseD(2) = "B: Captain Picard"
    64. CaptainEnterpriseD(3) = "C: Captain Kirk"
    65. CaptainEnterpriseD(4) = "D: Captain Spock"
    66. CaptainEnterpriseD(5) = "B"
    67. ReiseVoyager(0) = "Wie lange dauerte die Reise der USS Voyager?"
    68. ReiseVoyager(1) = "A: 5 Jahre"
    69. ReiseVoyager(2) = "B: 3 Wochen"
    70. ReiseVoyager(3) = "C: 17 Jahre"
    71. ReiseVoyager(4) = "D: 7 Jahre"
    72. ReiseVoyager(5) = "D"
    73. RangWesleyCrusher(0) = "Welchen Rang hatte Wesley Crusher inne, als er an Bord der USS Enterprise D diente?"
    74. RangWesleyCrusher(1) = "A: Crewman"
    75. RangWesleyCrusher(2) = "B: Chief Petty Officer"
    76. RangWesleyCrusher(3) = "C: Fähnrich"
    77. RangWesleyCrusher(4) = "D: Captain"
    78. RangWesleyCrusher(5) = "C"
    79. End Sub
    80. Public Sub Datenauswahl()
    81. 'Deklaration der Arrays
    82. Call Deklaration()
    83. '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):
    84. Dim WhichData As Integer
    85. WhichData = rdmArray.Next(4)
    86. If WhichData = 0 Then
    87. vQuestion = CaptainEnterpriseD(0)
    88. vOptionA = CaptainEnterpriseD(1)
    89. vOptionB = CaptainEnterpriseD(2)
    90. vOptionC = CaptainEnterpriseD(3)
    91. vOptionD = CaptainEnterpriseD(4)
    92. vRightAnswer = CaptainEnterpriseD(5)
    93. End If
    94. If WhichData = 1 Then
    95. vQuestion = ReiseVoyager(0)
    96. vOptionA = ReiseVoyager(1)
    97. vOptionB = ReiseVoyager(2)
    98. vOptionC = ReiseVoyager(3)
    99. vOptionD = ReiseVoyager(4)
    100. vRightAnswer = ReiseVoyager(5)
    101. End If
    102. If WhichData = 2 Then
    103. vQuestion = RangWesleyCrusher(0)
    104. vOptionA = RangWesleyCrusher(1)
    105. vOptionB = RangWesleyCrusher(2)
    106. vOptionC = RangWesleyCrusher(3)
    107. vOptionD = RangWesleyCrusher(4)
    108. vRightAnswer = RangWesleyCrusher(5)
    109. End If
    110. 'Ja, ich weiß, natürlich ist diese Lösung sehr provisorisch, aber sie müsste eig. auch funktionieren.
    111. End Sub
    112. End Class



    Und hier der Code des Formulars:

    Quellcode

    1. Public Class frmHaupt
    2. Dim oStarTrek As New StarTrek
    3. Dim blnAnswerRight As Boolean
    4. Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
    5. 'Generierung der Frage, Bereitschaft zur Ergebniseingabe
    6. btnStart.Enabled() = False
    7. 'Hier werden die Daten der Frage, die zufällig aufgerufen wurde, abgefragt.
    8. Call oStarTrek.Deklaration()
    9. Call oStarTrek.Datenauswahl()
    10. lblQuestion.Text = oStarTrek.Question()
    11. radOptionA.Text = oStarTrek.OptionA()
    12. radOptionB.Text = oStarTrek.OptionB()
    13. radOptionC.Text = oStarTrek.OptionC()
    14. radOptionD.Text = oStarTrek.OptionD()
    15. End Sub
    16. Private Sub CheckTheAnswer()
    17. 'Überprüfung der ausgewählten Daten
    18. If oStarTrek.RightAnswer() = "A" Then
    19. If radOptionA.Checked = True Then
    20. blnAnswerRight = True
    21. End If
    22. If radOptionA.Checked = False Then
    23. blnAnswerRight = False
    24. End If
    25. End If
    26. If oStarTrek.RightAnswer() = "B" Then
    27. If radOptionB.Checked = True Then
    28. blnAnswerRight = True
    29. End If
    30. If radOptionB.Checked = False Then
    31. blnAnswerRight = False
    32. End If
    33. End If
    34. If oStarTrek.RightAnswer() = "C" Then
    35. If radOptionC.Checked = True Then
    36. blnAnswerRight = True
    37. End If
    38. If radOptionC.Checked = False Then
    39. blnAnswerRight = False
    40. End If
    41. End If
    42. If oStarTrek.RightAnswer() = "D" Then
    43. If radOptionD.Checked = True Then
    44. blnAnswerRight = True
    45. End If
    46. If radOptionD.Checked = False Then
    47. blnAnswerRight = False
    48. End If
    49. End If
    50. End Sub
    51. Private Sub btnBestaetigen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBestaetigen.Click
    52. Call CheckTheAnswer()
    53. End Sub
    54. Noch ein paar unwichtige Prozeduren um dem benutzer zu sagen,
    55. End Class




    Wenn mir jemand sagen könnte, was ich falsch gemacht habe, wäre ich ihm sehr dankbar.

    MfG Capus
    Die Getter deiner Properties sind ein wenig blödsinnig.
    Du hast es so:

    VB.NET-Quellcode

    1. Public Property OptionA() As String
    2. Get
    3. OptionA() = vOptionA
    4. End Get
    5. Set(ByVal value As String)
    6. vOptionA = value
    7. End Set
    8. End Property
    Im Getter weist du deinem Property wieder eine neue Variable zu, was in einer Endlosschleife endet.
    Richtig wäre es so:

    VB.NET-Quellcode

    1. Public Property OptionA() As String
    2. Get
    3. Return vOptionA
    4. End Get
    5. Set(ByVal value As String)
    6. vOptionA = value
    7. End Set
    8. End Property