Inhalt von PictureBox überprüfen

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Inhalt von PictureBox überprüfen

    Hallo allerseits,

    Ich habe vor wenigen Tagen wieder angefangen mich mit Visual Basic 2010 zu Beschäftigen.
    Ich stehe jetzt allerdings vor einem Problem!
    Und zwar möchte ich, dass bei einem Klick auf eine Picturebox (sozusagen als Button benutzt) der Inhalt einer anderen Picturebox abgefragt wird um eine jeweilige Aktion auszuführen.
    Probiert hab ich schon folgendes, was allerdings nicht klappt:

    VB.NET-Quellcode

    1. Private Sub PictureBox1_Click(sender As System.Object, e As System.EventArgs) Handles PictureBox1.Click
    2. If PictureBox2.Image Is My.Resources.bild1 Then
    3. MsgBox("Hallo Welt")
    4. End If
    5. End Sub


    Hat jemand von eine Idee was ich ausprobieren könnte?

    Vielen Dank schon mal im Voraus :thumbup:
    Hi und willkommen im Forum,

    Verschoben.

    Zum Thema:
    Suchst Du eventuell sowas hier: msdn.microsoft.com/en-us/libra…cs-lang=vb#code-snippet-1

    Damit kannst Du 2 Bilder entsprechend vergleichen, weil so über die Instanzen scheint das wohl nicht zu gehen. Weiß ja nicht, was Visual Studio Dir da für einen Fehler hinwirft. "Geht nicht" ist da immer etwas dürftig.
    Musst schauen, welchen Typ das Image in den Ressourcen hat, also ob das schon ein Image ist, oder was anderes.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Vollzitat entfernt. ~Trade

    1. Danke fürs verschieben, war mit irgendwie klar, dass das die falsche Kategorie ist :D
    2. Danke, werd ich mir mal anschauen!
    3. In dem Fall ist es tatsächlich "geht nicht" weil ich keinen Fehler bekomme, es geht einfach nicht.

    Danke für die Antwort!

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

    T.E.C.H.N.O schrieb:

    der Inhalt einer anderen Picturebox
    musst Du laden und Dir gleichzeitig in einer separaten Variable merken, welches Bild geladen wird.
    Nutze dazu ein Enum, dass dieselben Namen haben kann, wie die Bilder in der Ressource.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    musst Du laden...


    Und wie kann ich das laden? Tut mir leid aber ich bin echt noch blutiger Anfänger :D

    Btw: Ich bin dabei ein "Zugfunkgerät" (Ausbildung sei Dank) als Software für den Unterricht der Azubis zu programmieren, da wir keine Geräte zum Üben haben.

    Also soll es wie folgt funktionieren: wenn PictureBox_Display die Datei "display.png" anzeigt und mann dann Taste 1 (in dem Fall eine PictureBox) anklickt, soll überprüft werden, welches Bild gerade in der PictureBox_Display angezeigt wird um dann die entsprechende Aktion auszulösen.

    z.B.:

    Wenn PictureBox_Display das Bild "display.png" anzeigt und man Taste 1 anklickt soll PictureBox_Display die Datei "menue_1.png" laden und anzeigen.
    Wenn man dann wiederum die Taste 1 anklickt soll überprüft werden welches Bild aktuell in der PictureBox_Display gezeigt wird und dann das nächste Bild geladen werden und so weiter.

    Da es jeden Menüpunkt nur einmal gibt, ergeben sich so einmalige Kombinationen und ich habe mir gedacht, man könnte das mit Else If machen.
    Ich schaff es aber weiß Gott nicht. Ich hoffe es war wenigstens einigermaßen verständlich :D

    Gruß

    T.E.C.H.N.O schrieb:

    laden
    so was:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Enum Bilder
    3. keins
    4. Bild1
    5. Bild2
    6. Bild3
    7. End Enum
    8. Dim BildInPictureBox2 As Bilder = Bilder.keins
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. ' Zuweisung des Bildes
    11. Me.PictureBox2.Image = My.Resources.Bild1
    12. Me.BildInPictureBox2 = Bilder.Bild1
    13. End Sub
    14. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    15. ' Abfrage des Bildes
    16. If Me.BildInPictureBox2 = Bilder.Bild1 Then
    17. MessageBox.Show("Hallo Welt")
    18. End If
    19. End Sub
    20. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    T.E.C.H.N.O schrieb:

    laden
    so was:


    Danke, hat super geklappt!

    Ich möchte allerdings bei einer "Taste" zwei Aktionen auslösen und zwar soll noch eine Textbox sichtbar gemacht werden.
    Mit "And" geht das allerdings nicht. Hast du da vielleicht auch noch einen Tipp für mich?

    Bis jetzt habe ich immer:

    VB.NET-Quellcode

    1. ​Private Sub img_btn_enter_Click(sender As System.Object, e As System.EventArgs) Handles img_btn_enter.Click
    2. 'Zugdaten eingeben
    3. If Me.BildInDisplay = Bilder.display Then
    4. display.Image = My.Resources.display_clear And TextBox1.Visible
    5. End If
    6. End Sub


    Allerdings bekomme ich den Fehler "Der And-Operator ist für die Typen "System.Drawing.Bitmap" und "Boolean" nicht definiert.

    Vielen Dank!

    Gruß

    T.E.C.H.N.O schrieb:

    VB.NET-Quellcode

    1. display.Image = My.Resources.display_clear And TextBox1.Visible
    Meinst Du dies:

    VB.NET-Quellcode

    1. If TextBox1.Visible Then
    2. display.Image = My.Resources.display_clear
    3. End If
    :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dann meinst du so...

    VB.NET-Quellcode

    1. Private Sub img_btn_enter_Click(sender As System.Object, e As System.EventArgs) Handles img_btn_enter.Click
    2. 'Zugdaten eingeben
    3. Dim result = (Me.BildInDisplay = Bilder.display)
    4. TextBox1.Visible = result
    5. If result Then display.Image = My.Resources.display_clear
    6. End Sub

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

    T.E.C.H.N.O schrieb:

    egal
    Du hast hier mehrere Snippets bekommen, Du musst sie nur richtig zusammensetzen. Das ist Dein Part. ;)

    T.E.C.H.N.O schrieb:

    VB.NET-Quellcode

    1. If Me.BildInDisplay = Bilder.display Then
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    zusammensetzen. Das ist Dein Part. ;)


    Ich habs ja genauso übernommen.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Public Class Form1
    2. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs)
    3. label_time.Text = Format$(Now, "long time")
    4. End Sub
    5. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    6. display.Image = My.Resources.display
    7. img_empfang.Image = My.Resources.empfang
    8. img_btn_not.Image = My.Resources.taste_notruf
    9. img_btn_1.Image = My.Resources.taste_1
    10. img_btn_2.Image = My.Resources.taste_2
    11. img_btn_3.Image = My.Resources.taste_3
    12. img_btn_4.Image = My.Resources.taste_4
    13. img_btn_5.Image = My.Resources.taste_5
    14. img_btn_6.Image = My.Resources.taste_6
    15. img_btn_7.Image = My.Resources.taste_7
    16. img_btn_8.Image = My.Resources.taste_8
    17. img_btn_9.Image = My.Resources.taste_9
    18. img_btn_10.Image = My.Resources.taste_0
    19. img_btn_11.Image = My.Resources.taste_11
    20. img_btn_12.Image = My.Resources.taste_12
    21. img_btn_13.Image = My.Resources.taste_13
    22. img_btn_14.Image = My.Resources.taste_14
    23. img_btn_fdl.Image = My.Resources.taste_fdl
    24. img_btn_zub.Image = My.Resources.taste_zub
    25. img_btn_sprech.Image = My.Resources.taste_sprech
    26. img_btn_loklok.Image = My.Resources.taste_loklok
    27. img_btn_reset.Image = My.Resources.taste_reset
    28. img_btn_up.Image = My.Resources.taste_up
    29. img_btn_down.Image = My.Resources.taste_down
    30. img_btn_enter.Image = My.Resources.taste_enter
    31. End Sub
    32. Enum Bilder
    33. sys_menu_1
    34. sys_menu_2
    35. sys_menu_3
    36. sys_menu_4
    37. display
    38. clear
    39. End Enum
    40. Dim displayInDisplay As Bilder = Bilder.display
    41. Dim menu1InDisplay As Bilder = Bilder.sys_menu_1
    42. Dim menu2InDisplay As Bilder = Bilder.sys_menu_2
    43. Dim menu3InDisplay As Bilder = Bilder.sys_menu_3
    44. Dim menu4InDisplay As Bilder = Bilder.sys_menu_4
    45. Private Sub img_btn_10_Click(sender As Object, e As EventArgs) Handles img_btn_10.Click
    46. ' Menü öffnen
    47. If Me.displayInDisplay = Bilder.display Then
    48. End If
    49. End Sub
    50. Private Sub img_btn_9_Click(sender As System.Object, e As System.EventArgs) Handles img_btn_9.Click
    51. 'Zugdaten eingeben
    52. If Me.displayInDisplay = Bilder.display Then
    53. display.Image = My.Resources.display_clear
    54. End If
    55. img_1.Image = My.Resources.zn
    56. img_2.Image = My.Resources.zn_fzst
    57. img_3.Image = My.Resources.softkey_clear
    58. img_4.Image = My.Resources.zn_anmelden
    59. img_5.Image = My.Resources.zn_evu
    60. img_6.Image = My.Resources.softkey_clear
    61. img_7.Image = My.Resources.softkey_clear
    62. img_8.Image = My.Resources.softkey_clear
    63. img_9.Image = My.Resources.zn_abgl
    64. img_10.Image = My.Resources.softkey_clear
    65. img_11.Image = My.Resources.softkey_zuruck
    66. img_12.Image = My.Resources.softkey_clear
    67. img_13.Image = My.Resources.softkey_clear
    68. img_14.Image = My.Resources.softkey_clear
    69. img_head.Image = My.Resources.zugdaten
    70. End Sub
    71. Private Sub img_btn_8_Click(sender As System.Object, e As System.EventArgs) Handles img_btn_8.Click
    72. 'System-Menü
    73. If Me.displayInDisplay = Bilder.display Then
    74. display.Image = My.Resources.sys_menu_1
    75. End If
    76. End Sub
    77. Private Sub img_btn_down_Click(sender As System.Object, e As System.EventArgs) Handles img_btn_down.Click
    78. 'System-Menü runter blättern
    79. If Me.menu1InDisplay = Bilder.sys_menu_1 Then
    80. display.Image = My.Resources.sys_menu_2
    81. ElseIf Me.menu2InDisplay = Bilder.sys_menu_2 Then
    82. display.Image = My.Resources.sys_menu_3
    83. ElseIf Me.menu3InDisplay = Bilder.sys_menu_3 Then
    84. display.Image = My.Resources.sys_menu_4
    85. End If
    86. End Sub
    87. Private Sub img_btn_up_Click(sender As System.Object, e As System.EventArgs) Handles img_btn_up.Click
    88. 'System-Menü hoch blättern
    89. If Me.menu2InDisplay = Bilder.sys_menu_2 Then
    90. display.Image = My.Resources.sys_menu_1
    91. End If
    92. End Sub
    93. Private Sub img_btn_enter_Click(sender As System.Object, e As System.EventArgs) Handles img_btn_enter.Click
    94. My.Computer.FileSystem.WriteAllText("C:\Program Files (x86)\Zugfunkgerät\var\zugnummer.txt", TextBox1.Text, False)
    95. TextBox1.Hide()
    96. End Sub
    97. Private Sub timer_refresh_Tick_1(sender As System.Object, e As System.EventArgs)
    98. label_zugnr.Text = My.Computer.FileSystem.ReadAllText("C:\Program Files (x86)\Zugfunkgerät\var\zugnummer.txt")
    99. End Sub
    100. End Class

    T.E.C.H.N.O schrieb:

    übernommen
    25 PictureBoxen?
    Sas riecht nach krassem Fehldesign.
    Bescheibe bitte mal erwas ausführlicher, was Dein Programm tun soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    25 PictureBoxen?






    Ich Versuche ein Zugbahnfunkgerät als Software für den Unterricht der Azubis zu programmieren.

    Die Tasten 1-14 und die Restlichen 8 äußeren Tasten sind die sogenannten "Hardkeys". Ich hab sie in dem Fall mit Pictureboxen dagestellt. Die Bilder bleiben immer die selben.
    Der Hintergrund ist ebenfalls eine Picturebox.
    Im Display das mittlere Feld ist das eigentliche Display wo sich das geschehen abspielt. Hier müssen Bilder getauscht werden.
    Die kleinen Pictureboxen sind die sogenannten "Softkeys" und können in der Belegung geändert werden. Deshalb müssen hier auch Bilder getauscht werden.
    Mein Ziel ist es, die Software so realistisch wie möglich nachzubauen.
    Das Bild in der Mitte soll sich je nach Tastendruck ändern. Da einie Tasten in den Menüs aber verschiedene Bedeutungen haben, habe ich mir folgendes gedacht:

    Beil klick auf die jeweilige Taste wird der Inhalt vom Display abgefragt (weil sich dieser ja verändert), dann die jeweilige Aktion ausgeführt, in dem Falle soll das Bild im eigentlichen Display geändert werden und immer so weiter. So, dass alles aufeinander aufbaut.

    T.E.C.H.N.O schrieb:

    Die Tasten 1-14 und die Restlichen 8 äußeren Tasten sind die sogenannten "Hardkeys". Ich hab sie in dem Fall mit Pictureboxen dagestellt. Die Bilder bleiben immer die selben.
    Da bietet sich aber das Control 'Button' an. Den Button kannst du auch mit einem Bildchen austatten...


    Benutze bitte zum Hochladen der Bilder, die forumsinterne Methode...

    T.E.C.H.N.O schrieb:

    Beil klick auf die jeweilige Taste wird der Inhalt vom Display abgefragt (weil sich dieser ja verändert)
    Der verändert isch ja nicht von selbst, sondern durch eine von deinem Programm ausgelöste Aktion.

    Trenne GUI und Daten und denke objektorientiert.
    Anstatt einer Picturebox nimmst du ein Objekt, das alle entsprechenden Informationen beinhaltet.
    Eine der Objektproperties kann ein Bild sein.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --