string als link verwenden

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ICEMAN-Wappen.

    string als link verwenden

    hallo zusammen hab mal wieder eine frage und diesmal nicht aus dem untericht und darum auch mit visual studio !!yeah!!

    und zwar versuche ich gerade einer picturebox zu sagen welches bild es anzeigen soll. ich habe nun bereits die zweite variante ausprobiert aber auch die geht nicht. hier mal der code für v2:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public BildPfad() As Image
    3. Public Kartenwert() As Byte
    4. Public zufallszahl As Integer
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. BildPfad(0) = My.Resources.Deckblatt
    7. BildPfad(1) = My.Resources.karo2c_152
    8. BildPfad(2) = My.Resources.karo3c_152
    9. BildPfad(3) = My.Resources.karo4c_152
    10. BildPfad(4) = My.Resources.karo5c_152
    11. BildPfad(5) = My.Resources.karo6c_152
    12. BildPfad(6) = My.Resources.karo7c_152
    13. BildPfad(7) = My.Resources.karo8c_152
    14. BildPfad(8) = My.Resources.karo9c_152
    15. BildPfad(9) = My.Resources.karo10c_152
    16. BildPfad(10) = My.Resources.karobubec_152
    17. BildPfad(11) = My.Resources.karodamec_152
    18. BildPfad(12) = My.Resources.karokoenigc_152
    19. BildPfad(13) = My.Resources.karoasc_152
    20. BildPfad(14) = My.Resources.herz2c_152
    21. BildPfad(15) = My.Resources.herz3c_152
    22. BildPfad(16) = My.Resources.herz4c_152
    23. BildPfad(17) = My.Resources.herz5c_152
    24. BildPfad(18) = My.Resources.herz6c_152
    25. BildPfad(19) = My.Resources.herz7c_152
    26. BildPfad(20) = My.Resources.herz8c_152
    27. BildPfad(21) = My.Resources.herz9c_152
    28. BildPfad(22) = My.Resources.herz10c_152
    29. BildPfad(23) = My.Resources.herzbubec_152
    30. BildPfad(24) = My.Resources.herzdamec_152
    31. BildPfad(25) = My.Resources.herzkoenigc_152
    32. BildPfad(26) = My.Resources.herzasc_152
    33. BildPfad(27) = My.Resources.pik2c_152
    34. BildPfad(28) = My.Resources.pik3c_152
    35. BildPfad(29) = My.Resources.pik4c_152
    36. BildPfad(30) = My.Resources.pik5c_152
    37. BildPfad(31) = My.Resources.pik6c_152
    38. BildPfad(32) = My.Resources.pik7c_152
    39. BildPfad(33) = My.Resources.pik8c_152
    40. BildPfad(34) = My.Resources.pik9c_152
    41. BildPfad(35) = My.Resources.pik10c_152
    42. BildPfad(36) = My.Resources.pikbubec_152
    43. BildPfad(37) = My.Resources.pikdamec_152
    44. BildPfad(38) = My.Resources.pikkoenigc_152
    45. BildPfad(39) = My.Resources.pikasc_152
    46. BildPfad(40) = My.Resources.kreuz2c_152
    47. BildPfad(41) = My.Resources.kreuz3c_152
    48. BildPfad(42) = My.Resources.kreuz4c_152
    49. BildPfad(43) = My.Resources.kreuz5c_152
    50. BildPfad(44) = My.Resources.kreuz6c_152
    51. BildPfad(45) = My.Resources.kreuz7c_152
    52. BildPfad(46) = My.Resources.kreuz8c_152
    53. BildPfad(47) = My.Resources.kreuz9c_152
    54. BildPfad(48) = My.Resources.kreuz10c_152
    55. BildPfad(49) = My.Resources.kreuzbubec_152
    56. BildPfad(50) = My.Resources.kreuzdamec_152
    57. BildPfad(51) = My.Resources.kreuzkoenigc_152
    58. BildPfad(52) = My.Resources.kreuzasc_152
    59. Kartenwert(0) = 0
    60. Kartenwert(1) = 2
    61. Kartenwert(2) = 3
    62. Kartenwert(3) = 4
    63. Kartenwert(4) = 5
    64. Kartenwert(5) = 6
    65. Kartenwert(6) = 7
    66. Kartenwert(7) = 8
    67. Kartenwert(8) = 9
    68. Kartenwert(9) = 10
    69. Kartenwert(10) = 2
    70. Kartenwert(11) = 3
    71. Kartenwert(12) = 4
    72. Kartenwert(13) = 11
    73. Kartenwert(14) = 2
    74. Kartenwert(15) = 3
    75. Kartenwert(16) = 4
    76. Kartenwert(17) = 5
    77. Kartenwert(18) = 6
    78. Kartenwert(19) = 7
    79. Kartenwert(20) = 8
    80. Kartenwert(21) = 9
    81. Kartenwert(22) = 10
    82. Kartenwert(23) = 2
    83. Kartenwert(24) = 3
    84. Kartenwert(25) = 4
    85. Kartenwert(26) = 11
    86. Kartenwert(27) = 2
    87. Kartenwert(28) = 3
    88. Kartenwert(29) = 4
    89. Kartenwert(30) = 5
    90. Kartenwert(31) = 6
    91. Kartenwert(32) = 7
    92. Kartenwert(33) = 8
    93. Kartenwert(34) = 9
    94. Kartenwert(35) = 10
    95. Kartenwert(36) = 2
    96. Kartenwert(37) = 3
    97. Kartenwert(38) = 4
    98. Kartenwert(39) = 11
    99. Kartenwert(40) = 2
    100. Kartenwert(41) = 3
    101. Kartenwert(42) = 4
    102. Kartenwert(43) = 5
    103. Kartenwert(44) = 6
    104. Kartenwert(45) = 7
    105. Kartenwert(46) = 8
    106. Kartenwert(47) = 9
    107. Kartenwert(48) = 10
    108. Kartenwert(49) = 2
    109. Kartenwert(50) = 3
    110. Kartenwert(51) = 4
    111. Kartenwert(52) = 11
    112. End Sub
    113. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    114. zufallszahl = CInt(NumericUpDown1.Value)
    115. Label2.Text = Kartenwert(zufallszahl)
    116. PictureBox1.Image = BildPfad(zufallszahl)
    117. End Sub
    118. End Class


    und bei v1 war bildpfad as string deklariert und jeder link hat ein tostring dranbekommen. auch das hat net funktioniert wie kriege ich das hin, das ich dem programm sagen kann welches bild er anzeigen soll??

    mal wieder besten dank im voraus
    mfg ICE

    edit: hier noch die fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ICEMAN-Wappen“ ()

    Hallo!

    Statt eines Array kannst du auch eine generische Liste verwenden,
    ist was die Anzahl betrifft dynamisch und du musst vorher nicht wissen,
    wieviele Elemente du hinzufügen möchtest:

    VB.NET-Quellcode

    1. Public BildPfade As new List(Of Image)
    2. BildPfade.add(...)
    3. BildPfade.add(...)
    4. picturebox.image = Bildpfade.Item(0)
    @vanitas-mundi: wenn wir schon bei Verbesserungsvorschlägen sind: Dann empfehle ich gleich eine List (Of clsKarte):

    VB.NET-Quellcode

    1. Public Class clsKarte
    2. Public Bild as image
    3. Public Wert as integer
    4. 'mit Konstruktor:
    5. Sub New (bild as image, wert as integer)
    6. Myclass.Bild = bild
    7. Myclass.Wert = wert
    8. End Sub
    9. 'usw....
    10. End Class
    das würde doch aber bedeuten das ich die klasse anlegen muss und dann auch noch jede karte einzeln einlesen und jedesmal bei bedarf direkt ansprechen muss oder liege ich da falsch?
    also ich denke das wie variante mit den arrays( es werden noch einige mehr, in diesem fall einfacher ist, da ich die zufallszahl ja immerwieder nutzen kann bei jedem array. ich gebe ja zu das es vll nicht gerade guter code ist aber in diesem fall effektiv.

    aber ich lasse mich gern eines besseren belehren. nur leider mangelt es mir noch im anlegen von klassen und den dazugehörigen eigenschaften. drüber nach gedacht hab ich auch schon:

    Klasse: Spielkarte
    eigenschaften:
    -Name
    -Link zum Bild
    -Wert
    -schon gespiel?? (as Boolean)
    -gerade in gebrauch? (as Boolean),
    -usw.

    aber leider mangelt es an wissen und unser lehrer hats ja mal angeschnitten aber davon is nu nicht viel hängen geblieben.
    Ist im Prinzip nicht viel anders, als du es im ersten Post hast. Nur richtiger :rolleyes:
    Anstatt das siebzehnte Bild anzusprechen, und den siebzehnten Wert auszulesen, hast du das siebzehnte Kartenobjekt. Und vom dem liest du den Wert, das Bild, und ob es schon gespielt wurde.
    Oder, wie im folgenden Beispiel, ein Kartenstapel, von dem du die oberste Karte abhebst...

    kleines Beispiel

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim AlleKarten As New List(Of clsKarte)
    3. Public Kartenstapel As New Stack(Of clsKarte)
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. 'Alle existierenden Karten deklarieren
    6. With AlleKarten
    7. .Add(New clsKarte("Karo sieben", My.Resources.Karo7, 14))
    8. .Add(New clsKarte("Kreuz Dame", My.Resources.kreuzdamec_152, 3))
    9. .Add(New clsKarte("Kreuz König", My.Resources.kreuzkoenigc_152, 4))
    10. .Add(New clsKarte("Kreuz As", My.Resources.kreuzasc_152, 11))
    11. 'sollte fortgesetzt werden
    12. End With
    13. 'Alle verfügbaren Karten in den Kartenstapel
    14. Randomize()
    15. For Each karte In _
    16. From a In AlleKarten Order By Rnd() Select a
    17. Kartenstapel.Push(karte)
    18. Next
    19. Dim aktuelleKarte As clsKarte
    20. 'Solange noch Karten auf dem Stapel:
    21. Do While Kartenstapel.Count > 0
    22. 'Karte abheben...
    23. aktuelleKarte = Kartenstapel.Pop()
    24. 'und vorlesen...
    25. MessageBox.Show("Die Karte " & aktuelleKarte.Bezeichnung & " hat den Wert " & aktuelleKarte.Wert)
    26. Loop
    27. End Sub
    28. End Class
    29. Public Class clsKarte
    30. Public Bild As Image
    31. Public Wert As Integer
    32. Public schongespielt As Boolean = False
    33. Public Bezeichnung As String
    34. Sub New(ByVal Bezeichnung As String, ByVal bild As Image, ByVal wert As Integer)
    35. MyClass.bezeichnung = Bezeichnung
    36. MyClass.Bild = bild
    37. MyClass.Wert = wert
    38. End Sub
    39. Sub New(ByVal bild As Image, ByVal wert As Integer)
    40. MyClass.Bild = bild
    41. MyClass.Wert = wert
    42. End Sub
    43. End Class


    Wenn du das Beispiel grundlegend verstanden hast, bist du einen Schritt näher an der OOP (Objektorientierten Programmierung). ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „der_Kurt“ ()

    ok also so wie ich das sehe kann ich den code damit ja viel kürzer halten als wenn ich es so mache wie ich mir das aus gedacht habe. vor allem der kartenstapel( as stack) ist super stack kannte ich noch nicht als datentyp. das ist natürlich sehr hilfreich danke dafür

    so hab den code mal meinen bedürfnissen angepasst, da ja jede karte einzeln gegeben wird falls der mitspieler noch eine möchte.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim AlleKarten As New List(Of clsKarte)
    3. Public Kartenstapel As New Stack(Of clsKarte)
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. 'Alle existierenden Karten deklarieren
    6. With AlleKarten
    7. .Add(New clsKarte("Karo sieben", My.Resources.Karo7c_152, 14))
    8. .Add(New clsKarte("Kreuz Dame", My.Resources.kreuzdamec_152, 3))
    9. .Add(New clsKarte("Kreuz König", My.Resources.kreuzkoenigc_152, 4))
    10. .Add(New clsKarte("Kreuz As", My.Resources.kreuzasc_152, 11))
    11. 'sollte fortgesetzt werden
    12. End With
    13. 'Alle verfügbaren Karten in den Kartenstapel
    14. Randomize()
    15. End Sub
    16. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    17. For Each karte In _
    18. From a In AlleKarten Order By Rnd() Select a
    19. Kartenstapel.Push(karte)
    20. Next
    21. End Sub
    22. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    23. Dim aktuelleKarte As clsKarte
    24. 'Solange noch Karten auf dem Stapel:
    25. If Kartenstapel.Count > 0 Then
    26. 'Karte abheben...
    27. aktuelleKarte = Kartenstapel.Pop()
    28. 'und vorlesen...
    29. MessageBox.Show("Die Karte " & aktuelleKarte.Bezeichnung & " hat den Wert " & aktuelleKarte.Wert)
    30. Else
    31. MessageBox.Show("Sie haben sich überkauft!")
    32. End If
    33. End Sub
    34. End Class
    35. Public Class clsKarte
    36. Public Bild As Image
    37. Public Wert As Integer
    38. Public schongespielt As Boolean = False
    39. Public Bezeichnung As String
    40. Sub New(ByVal Bezeichnung As String, ByVal bild As Image, ByVal wert As Integer)
    41. MyClass.Bezeichnung = Bezeichnung
    42. MyClass.Bild = bild
    43. MyClass.Wert = wert
    44. End Sub
    45. Sub New(ByVal bild As Image, ByVal wert As Integer)
    46. MyClass.Bild = bild
    47. MyClass.Wert = wert
    48. End Sub
    49. End Class


    achso eine frage noch.
    ich nabe gestern versucht die subs auf ein anderes modul auszulagern und vollte dann darauf zugreifen z.b.

    funktionen.auswerten()

    ^^so kannte ich das noch von vba da geht das ja so.
    leider funktionierte das nicht. wo ist der fehler?? was kann ich machen damit ich es übersichtlicher habe??

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ICEMAN-Wappen“ ()