Wichtige Frage || BackgroundImage

  • VB.NET

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von jvbsl.

    Wichtige Frage || BackgroundImage

    Hallo liebe Community, ich habe mal eine wichtige Frage an euch und zwar würde ich gerne wissen, wie man das Hintergrundbild einer Form dauerhaft ändert. Ich habe auf meiner Form1 einen Button mit dem Text "Einstellungen".. Wenn man auf diesen Button klickt, öffnet sich die Form zwei.. Dort habe ich 6 verschiedene PictureBoxes und 6 RadioButtons sowie einen Button hinzugefügt.. Wenn sollte das Hintergrundbild von Form1 durch die Form2 verändern.
    Z. B. Will jemand das Beispielbild von PictureBox1, er wählt RadioButton1 und klickt auf den Button.. Das habe ich geschafft, das Hintergrundbild verändert sich.. Mein Problem ist jetzt, dass das Hintergrund dauerhaft verändert werden soll. Also wenn man die Form schließt und neu auf macht, soll diese wie eingestellt sein. . Also es soll sich DAUERHAFT ändern :)

    Ich bin noch ein Anfänger und bitte euch mir das genaustens zu erklären..

    MfG,

    Daniel !



    PS, mein Code für den Button aus der 2. Form !

    Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. If RadioButton1.Checked Then
    3. Form1.BackgroundImage = PictureBox1.Image
    4. ElseIf RadioButton2.Checked Then
    5. Form1.BackgroundImage = PictureBox2.Image
    6. ElseIf RadioButton3.Checked Then
    7. Form1.BackgroundImage = PictureBox3.Image
    8. ElseIf RadioButton4.Checked Then
    9. Form1.BackgroundImage = PictureBox4.Image
    10. ElseIf RadioButton5.Checked Then
    11. Form1.BackgroundImage = PictureBox5.Image
    12. ElseIf RadioButton6.Checked Then
    13. Form1.BackgroundImage = PictureBox6.Image
    14. End If
    15. Form1.Show()
    16. Me.Close()
    17. End Sub
    18. End Class
    Du kannst Werte die du dauerhaft behalten möchtest in My.Settings ablegen und jederzeit auch wieder abfragen. Also auch bei FormLoad.
    Dazu gibt es hier im Forum jedemenge Informationen.

    Alternative kannst du sachen auch in eine Datei schreiben. Was aber für den Anfang nicht so einfach ist.
    Dazu wären die Stichworte: CSV, XML

    bernd
    Vielen Dank @Vorposter.. Ich werde mich mal weiter informieren..
    Ein kleines grobes Tutorial wäre auch nicht schlecht.
    Ich habe es schon mal in My.Settings versucht, das habe ich aus einen Tutorial abgeschaut..
    Jedoch hat das nicht bei BackgroundImage geklappt, sondern nur bei Textbox und Sonstigem :)
    Weil es dort kein Image gibt.
    Leg dir dort ein String an. Speichere darin den Namen und Pfad des Bild.
    Beim laden host du dir den String und machst dann

    VB.NET-Quellcode

    1. PictureBox1.BakcGroundImage = Image.FromFile("DeinPfadUndName")


    das schafst du schon
    Ich habe ehrlich gesagt darin wenig Ahnung. Ich bin noch ein Anfänger..
    Ich weiß nicht wie man sich einen String anlegen kann :wacko: Ich stell mich bisschen dumm an, ich weiß :D
    Vielleicht etwas genauer beschreiben ?

    Das Problem ist auch noch, wenn ich das mit dem Pfad mache, hat nicht jeder dieses Hintergrundbild, da bei einigen der Pfad auch anders ist..
    Oder könnte man eventuell nur als Pfad ("/Pictures/Background1.png").. Dieser Ordner Pictures würde sich eben auch in dem Ordner befinden :)
    Also ich benutz manchmal Labels als stütze. Z.B könntest du in das Radiobuttonchanged event folgendes schreiben

    VB.NET-Quellcode

    1. If RadioButton1.Checked = True Then
    2. Label1.Text = "bild1"
    3. Else If RadioButton2.Checked = True Then
    4. Label1.Text = "bild2"
    5. 'und so weiter...
    6. 'dann stellst du das für das hintergrundbild ein, z.B so
    7. If Label1.Text = "bild1" Then
    8. Form1.BackgroundImage = PictureBox1.Image
    9. Else If Label1.Text = "bild2" Then
    10. Form1.BackgroundImage = PictureBox2.Image
    11. 'und so weiter

    Dann speicherst du den Label Text mit My.Settings oder in eine .ini datei und lädst diese beim Form_Load event

    MfG

    Flipez schrieb:

    Also ich benutz manchmal Labels als stütze. Z.B könntest du in das Radiobuttonchanged event folgendes schreiben

    VB.NET-Quellcode

    1. If RadioButton1.Checked = True Then
    2. Label1.Text = "bild1"
    3. Else If RadioButton2.Checked = True Then
    4. Label1.Text = "bild2"
    5. 'und so weiter...
    6. 'dann stellst du das für das hintergrundbild ein, z.B so
    7. If Label1.Text = "bild1" Then
    8. Form1.BackgroundImage = PictureBox1.Image
    9. Else If Label1.Text = "bild2" Then
    10. Form1.BackgroundImage = PictureBox2.Image
    11. 'und so weiter

    Dann speicherst du den Label Text mit My.Settings oder in eine .ini datei und lädst diese beim Form_Load event

    MfG

    Gute Idee.. Ich werde mir das mal genauer anschauen, wie das aussehen wird..

    Flipez schrieb:

    Ach ja und am besten noch das mit rein nehem, dann sieht es keiner

    VB.NET-Quellcode

    1. Label1.Visible = False

    Ich weiß nicht wieso, aber das funktioniert nicht.. Wo kann mein Fehler sein?

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. If RadioButton1.Checked = True Then
    3. Label1.Text = "bild1"
    4. ElseIf RadioButton2.Checked = True Then
    5. Label1.Text = "bild2"
    6. ElseIf RadioButton3.Checked = True Then
    7. Label1.Text = "bild3"
    8. ElseIf RadioButton4.Checked = True Then
    9. Label1.Text = "bild4"
    10. ElseIf RadioButton5.Checked = True Then
    11. Label1.Text = "bild5"
    12. ElseIf RadioButton6.Checked = True Then
    13. Label1.Text = "bild6"
    14. End If
    15. If Label1.Text = "bild1" Then
    16. Form1.BackgroundImage = PictureBox1.Image
    17. ElseIf Label1.Text = "bild2" Then
    18. Form1.BackgroundImage = PictureBox2.Image
    19. ElseIf Label1.Text = "bild3" Then
    20. Form1.BackgroundImage = PictureBox3.Image
    21. ElseIf Label1.Text = "bild4" Then
    22. Form1.BackgroundImage = PictureBox4.Image
    23. ElseIf Label1.Text = "bild5" Then
    24. Form1.BackgroundImage = PictureBox5.Image
    25. ElseIf Label1.Text = "bild6" Then
    26. Form1.BackgroundImage = PictureBox6.Image
    27. End If
    28. My.Settings.Speicherpunkt1 = Label1.Text
    29. End Sub



    Ich bin unter My Projekt -> Einstellungen -> und dort..

    Name: Speicherpunkt1
    Typ: String
    Bereich: Benutzer
    Wert: -garnichts-
    hmm, naja da kann ich nicht weiterhelfen da ich mich mit my.settings noch nicht befasst habe..aber probier mal das:

    VB.NET-Quellcode

    1. Public Function INI_ReadValueFromFile(ByVal strSection As String, ByVal strKey As String, ByVal strDefault As String, ByVal strFile As String) As String
    2. 'Funktion zum Lesen
    3. 'strSection = Sektion in der INI-Datei
    4. 'strKey = Name des Schlüssels
    5. 'strDefault = Standardwert, wird zurückgegeben, wenn der Wert in der INI-Datei nicht gefunden wurde
    6. 'strFile = Vollständiger Pfad zur INI-Datei
    7. Dim strTemp As String = Space(1024), lLength As Integer
    8. lLength = GetPrivateProfileString(strSection, strKey, strDefault, strTemp, strTemp.Length, strFile)
    9. Return (strTemp.Substring(0, lLength))
    10. End Function
    11. Public Function INI_WriteValueToFile(ByVal strSection As String, ByVal strKey As String, ByVal strValue As String, ByVal strFile As String) As Boolean
    12. 'Funktion zum Schreiben
    13. 'strSection = Sektion in der INI-Datei
    14. 'strKey = Name des Schlüssels
    15. 'strValue = Wert, der geschrieben werden soll
    16. 'strFile = Vollständiger Pfad zur INI-Datei
    17. Return (Not (WritePrivateProfileString(strSection, strKey, strValue, strFile) = 0))
    18. End Function

    Dann bei deinem Button das rein:

    VB.NET-Quellcode

    1. INI_WriteValueToFile("hintergrund", "Text1", Label1.Text, ".\Einstellungen.ini")

    und bei Load dann das:

    VB.NET-Quellcode

    1. If IO.File.Exists(".\Einstellungen.ini") Then
    2. Label1.Text = INI_ReadValueFromFile("hintergrund", "Text1", "", ".\Einstellungen.ini")
    3. End If


    und ganz oben nicht vergesssen

    VB.NET-Quellcode

    1. Imports System.IO
    nein, du musst eig den code nur kopieren, bracuhst keinen schlüssel eingeben. nur kopieren, den bei button kopieren und bei load und ganz oben den ander. das ist nur so ne erläuterung. die funktion einfach unten dran und den rest einfügen..fertig ;)

    Flipez schrieb:

    nein, du musst eig den code nur kopieren, bracuhst keinen schlüssel eingeben. nur kopieren, den bei button kopieren und bei load und ganz oben den ander. das ist nur so ne erläuterung. die funktion einfach unten dran und den rest einfügen..fertig ;)
    Ich stell mich einfach nur dumm.. :)
    Ist schon zu viel für mein Kopf. :(
    Ok, du hast deinen Code, gehts ganz noch unten und kopierst ganz unten dran ( aber noch vor das end class) den code hier:

    VB.NET-Quellcode

    1. Public Function INI_ReadValueFromFile(ByVal strSection As String, ByVal strKey As String, ByVal strDefault As String, ByVal strFile As String) As String
    2. 'Funktion zum Lesen
    3. 'strSection = Sektion in der INI-Datei
    4. 'strKey = Name des Schlüssels
    5. 'strDefault = Standardwert, wird zurückgegeben, wenn der Wert in der INI-Datei nicht gefunden wurde
    6. 'strFile = Vollständiger Pfad zur INI-Datei
    7. Dim strTemp As String = Space(1024), lLength As Integer
    8. lLength = GetPrivateProfileString(strSection, strKey, strDefault, strTemp, strTemp.Length, strFile)
    9. Return (strTemp.Substring(0, lLength))
    10. End Function
    11. Public Function INI_WriteValueToFile(ByVal strSection As String, ByVal strKey As String, ByVal strValue As String, ByVal strFile As String) As Boolean
    12. 'Funktion zum Schreiben
    13. 'strSection = Sektion in der INI-Datei
    14. 'strKey = Name des Schlüssels
    15. 'strValue = Wert, der geschrieben werden soll
    16. 'strFile = Vollständiger Pfad zur INI-Datei
    17. Return (Not (WritePrivateProfileString(strSection, strKey, strValue, strFile) = 0))
    18. End Function

    Dann geht zu zum Designer, klickst doppelt auf den Button und kopierst dort das rein:

    VB.NET-Quellcode

    1. INI_WriteValueToFile("hintergrund", "Text1", Label1.Text, ".\Einstellungen.ini")


    Dann gehst du wieder zum designer und klickst doppel auf die Form, dann das rein:

    VB.NET-Quellcode

    1. If IO.File.Exists(".\Einstellungen.ini") Then
    2. Label1.Text = INI_ReadValueFromFile("hintergrund", "Text1", "", ".\Einstellungen.ini")
    3. End If

    Dann bleibstr du im Code und gehst ganz nach oben. Dort koperist du das rein (ganz oben, also auch über die class)

    VB.NET-Quellcode

    1. Imports System.IO


    Das solltest du jetz aber schon verstehen, wenn icht, rate ich dir ein Buch zu lesen ;)

    Flipez schrieb:

    Ok, du hast deinen Code, gehts ganz noch unten und kopierst ganz unten dran ( aber noch vor das end class) den code hier:

    VB.NET-Quellcode

    1. Public Function INI_ReadValueFromFile(ByVal strSection As String, ByVal strKey As String, ByVal strDefault As String, ByVal strFile As String) As String
    2. 'Funktion zum Lesen
    3. 'strSection = Sektion in der INI-Datei
    4. 'strKey = Name des Schlüssels
    5. 'strDefault = Standardwert, wird zurückgegeben, wenn der Wert in der INI-Datei nicht gefunden wurde
    6. 'strFile = Vollständiger Pfad zur INI-Datei
    7. Dim strTemp As String = Space(1024), lLength As Integer
    8. lLength = GetPrivateProfileString(strSection, strKey, strDefault, strTemp, strTemp.Length, strFile)
    9. Return (strTemp.Substring(0, lLength))
    10. End Function
    11. Public Function INI_WriteValueToFile(ByVal strSection As String, ByVal strKey As String, ByVal strValue As String, ByVal strFile As String) As Boolean
    12. 'Funktion zum Schreiben
    13. 'strSection = Sektion in der INI-Datei
    14. 'strKey = Name des Schlüssels
    15. 'strValue = Wert, der geschrieben werden soll
    16. 'strFile = Vollständiger Pfad zur INI-Datei
    17. Return (Not (WritePrivateProfileString(strSection, strKey, strValue, strFile) = 0))
    18. End Function

    Dann geht zu zum Designer, klickst doppelt auf den Button und kopierst dort das rein:

    VB.NET-Quellcode

    1. INI_WriteValueToFile("hintergrund", "Text1", Label1.Text, ".\Einstellungen.ini")


    Dann gehst du wieder zum designer und klickst doppel auf die Form, dann das rein:

    VB.NET-Quellcode

    1. If IO.File.Exists(".\Einstellungen.ini") Then
    2. Label1.Text = INI_ReadValueFromFile("hintergrund", "Text1", "", ".\Einstellungen.ini")
    3. End If

    Dann bleibstr du im Code und gehst ganz nach oben. Dort koperist du das rein (ganz oben, also auch über die class)

    VB.NET-Quellcode

    1. Imports System.IO


    Das solltest du jetz aber schon verstehen, wenn icht, rate ich dir ein Buch zu lesen ;)

    Das habe ich ja ..

    Nur wird das hier blau unterstrichen..

    INI_WriteValueToFile
    GetPrivateProfileString
    WritetPrivateProfileString
    Es ist wirlklich nicht so schwer. ab und zu mal mit F1 Hilfe bei msdn reinschauen und dann ist das auch verstanden und nicht nur wild kopiert.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class Form1
    3. Dim MeinBildPfad As String
    4. ' Form Laod
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. My.Settings.Reload()
    7. If My.Settings.MeinBild <> "" Then
    8. PictureBox1.BackgroundImageLayout = ImageLayout.Zoom
    9. PictureBox1.BackgroundImage = Image.FromFile(My.Settings.MeinBild)
    10. End If
    11. End Sub
    12. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    13. Dim ofd As New OpenFileDialog
    14. With ofd
    15. Dim result As DialogResult = .ShowDialog
    16. If result = Windows.Forms.DialogResult.Cancel Then
    17. Exit Sub
    18. Else
    19. MeinBildPfad = ofd.FileName
    20. End If
    21. End With
    22. PictureBox1.BackgroundImage = Image.FromFile(MeinBildPfad)
    23. My.Settings.MeinBild = MeinBildPfad
    24. My.Settings.Save()
    25. End Sub
    26. End Class


    lesen, versuche starten und ganz wichtig verstehen. nicht das erste programm übers knie brechen

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

    omg omg omg, wozu ein Label, wenn es Unsichtbar ist? Klar, bei den heutigen PC's merkt man keinen unterschied, aber eine String Variable mit den hier max. 255 Bytes(Pfad darf zumindest bei XP nur max 255 zeichen haben) ist gewiss kleiner als eine String Variable für den Namen, eine für und das für usw...selbst schon das erstellen erfolgt trotz Visible = False, das sind alles viele unnötige WinAPI aufrufe...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich hab erst vor 2 Wochen mit dieser Programmiersprache angefangen..
    Wenn mir jemand Begriffe hier schreibt, die ich noch nie gehört habe, ist es klar das ich das nicht verstehe :)
    Mein Code sieht ganz einfach aus..

    Am besten ich mache jetzt mein neues Projekt auf.. Dort erstelle ich die 2 Forms-Anwendungen..

    Form1 bekommt einen Button und einen Standarthintergrund..
    Durch klick auf den Button ("Optionen") wird sich Form2 öffnen..
    Auf Form2 sollen 6 verschiedene PictureBoxes und 6 Radiobuttons sowie auch ein Button hinzugefügt werden..
    Man soll sich für eine PictureBox (Hintergrund der Form1) entscheiden können und dann einen mit dem Radiobutton auswählen können.
    Man sollte auf den Button klicken der auf Form2 ist ("Ändern und Speichern"). Dann sollte halt mein Hintergrundbild von Form1 verändert werden
    und gespeichert werden, d. h. dass das neue Hintergrundbild immer angezeigt wird, auch wenn man diese Form schließt und neu anmacht..

    Habe bis jetzt alles außer das Fette unterstrichene da :) So schwer kann das doch nicht sein, oder? :D
    Ich meine, ich hab noch nie wirklich etwas mit String oder so gearbeitet, deshalb verstehe ich auch nicht wenn jemand schreibt Lege dir einen neuen String an oder so.