GUI Tab Aktualisieren

  • Hab eine GUI erstellt mit mehreren Tabs.
    Sagen wir mal in Tab1 schreibe ich was in eine .ini Datei und im 2.Tab wird die .ini Datei ausgelesen.
    Wenn sich nun in der .ini Datei ein Wert ändert, wird der geänderte Wert aber nicht in Tab2 angezeigt sondern der Wert wo vor dem GUI Start drinn war.

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    GuiCreate( $titel, 1000, 800)
    GuiCtrlCreateTab(0, 0, 1000, 800)
    GuiCtrlCreateTabItem("Daten eingeben")
    $in = GUICtrlCreateInput ("test", 240, 280, 150, 20)
    $save = GUICtrlCreateButton("Speichern", 60, 390, 100)
    GuiCtrlCreateTabItem("Daten auslesen")
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    GuiCtrlCreateLabel($titel, 30, 200)
    GUICtrlCreateTabItem("")
    GuiSetState()
    Do
    $msg = GUIGetMsg()

    Select
    Case $msg= $save
    IniWrite( "config.ini", "Titel", "Titel", GUICtrlRead($in))
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]


    Ich weiss mit einem Aktualisierungsbutton könnte man das regeln. Aber ich will, dass wenn man auf einen Tab klickt, dass er sich aktualisiert.

    Einmal editiert, zuletzt von Spion (19. April 2007 um 19:48)

  • If Iniread(blabla) <> $Variableausmtab Then
    GuiCtrlsetData($Variableausmtab, Iniread(blabla))
    EndIf


    Ned getestet.. Einfach so audm kopp
    hoffe das meintest du :)

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]

    Einmal editiert, zuletzt von Blubkuh (19. April 2007 um 20:07)

  • Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    GuiCreate( $titel, 1000, 800)
    GuiCtrlCreateTab(0, 0, 1000, 800)
    GuiCtrlCreateTabItem("Daten eingeben")
    $in = GUICtrlCreateInput ("test", 240, 280, 150, 20)
    $save = GUICtrlCreateButton("Speichern", 60, 390, 100)
    $out = GuiCtrlCreateTabItem("Daten auslesen")
    If IniRead( "config.ini", "Titel", "Titel", "Fehler") <> $in Then
    GuiCtrlsetData($out, IniRead( "config.ini", "Titel", "Titel", "Fehler"))
    EndIf
    GuiCtrlCreateLabel($titel, 30, 200)
    GUICtrlCreateTabItem("")
    GuiSetState()
    Do
    $msg = GUIGetMsg()

    Select
    Case $msg= $save
    IniWrite( "config.ini", "Titel", "Titel", GUICtrlRead($in))
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Wenn du es so meinst. Geht leider auch nicht.
    Hab schon alles mögliche versucht aber es will nicht funktionieren :weinen:

    • Offizieller Beitrag

    hallo!

    Du musst doch nur beim speichern auch das Label aktualisieren!

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    GuiCreate( $titel, 1000, 800)
    GuiCtrlCreateTab(0, 0, 1000, 800)
    GuiCtrlCreateTabItem("Daten eingeben")
    $in = GUICtrlCreateInput ("test", 240, 280, 150, 20)
    $save = GUICtrlCreateButton("Speichern", 60, 390, 100)
    $out = GuiCtrlCreateTabItem("Daten auslesen")
    If IniRead( "config.ini", "Titel", "Titel", "Fehler") <> $in Then
    GuiCtrlsetData($out, IniRead( "config.ini", "Titel", "Titel", "Fehler"))
    EndIf
    $label = GuiCtrlCreateLabel($titel, 30, 200)
    GUICtrlCreateTabItem("")
    GuiSetState()
    Do
    $msg = GUIGetMsg()
    Select
    Case $msg= $save
    IniWrite( "config.ini", "Titel", "Titel", GUICtrlRead($in))
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    GUICtrlSetData($label,$titel)

    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
  • Ok so würde es funktionieren.

    Aber das ist eigentlich nicht mein Ziel. War ein blödes Beispiel von mir,sorry.

    Es geht eher darum, das eine Internetseite eingelesen werden soll, wenn ich auf z.B. Tab1 gehe. Gehe ich jetzt auf Tab2 und wieder zurück auf Tab1, dann soll er sich die Internetseite wieder erneut einlesen.

    • Offizieller Beitrag
    [autoit]

    While 1
    $msg = GUIGetMsg()
    $statTab = _GUICtrlTabGetCurSel($Tab)
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $statTab = 0 ; Index des Items Nullbasiert
    ; hier was passieren soll (_reload )
    ; usw.

    [/autoit]

    Edit:
    Du solltest aber im Case einen Schalter setzen, damit die Aktualisierung nur beim Aktivieren des TabItems durchgeführt wird und nicht ständig.
    In etwa so:

    [autoit]

    Case $statTab = 0 ; Index des Items Nullbasiert
    If $reloaded = 0 Then
    ; Reload durchführen
    $reloaded = 1 ; Variable muss bei Programmstart auf "0" gesetzt sein
    EndIf
    Case ; bei allen anderen TabItems durchführen
    $reloaded = 0

    [/autoit]
  • Irgendwas mach ich da falsch :weinen:

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <GuiTab.au3>
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    $reloaded = 0
    GuiCreate( $titel, 1000, 800)
    $tab = GuiCtrlCreateTab(0, 0, 1000, 800)

    [/autoit] [autoit][/autoit] [autoit]

    $tab1 = GuiCtrlCreateTabItem("Daten eingeben")
    $in = GUICtrlCreateInput ("test", 240, 280, 150, 20)
    $save = GUICtrlCreateButton("Speichern", 60, 390, 100)
    GUICtrlCreateTabItem("")

    [/autoit] [autoit][/autoit] [autoit]

    $tab2 = GuiCtrlCreateTabItem("Daten auslesen")
    $label = GuiCtrlCreateLabel($titel, 30, 200)
    GUICtrlCreateTabItem("")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GuiSetState()
    Do
    $msg = GUIGetMsg()
    $tab1 = _GUICtrlTabGetCurSel($tab)
    $tab2 = _GUICtrlTabGetCurSel($tab)
    Select
    Case $msg= $save
    IniWrite( "config.ini", "Titel", "Titel", GUICtrlRead($in))
    Case $tab2 = 0 ; Index des Items Nullbasiert
    If $reloaded = 0 Then
    ; Reload durchführen
    $reloaded = 1 ; Variable muss bei Programmstart auf "0" gesetzt sein
    EndIf ; hier was passieren soll (_reload )
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    Case $tab1 = 0
    $reloaded = 0
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Weil so funktioniert es nicht.

    • Offizieller Beitrag

    probiers mal so:

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <GuiTab.au3>
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    $reloaded = 0
    GuiCreate( $titel, 800, 600)
    $tab = GuiCtrlCreateTab(0, 0, 800, 600)

    $tab1 = GuiCtrlCreateTabItem("Daten eingeben")
    $in = GUICtrlCreateInput ("test", 240, 280, 150, 20)
    $save = GUICtrlCreateButton("Speichern", 60, 390, 100)
    GUICtrlCreateTabItem("")

    $tab2 = GuiCtrlCreateTabItem("Daten auslesen")
    $label = GuiCtrlCreateLabel($titel, 30, 200)
    GUICtrlCreateTabItem("")



    GuiSetState()

    [/autoit] [autoit][/autoit] [autoit]

    $reloaded = 0
    Do
    $msg = GUIGetMsg()
    $Selecttab = _GUICtrlTabGetCurSel($tab) ; Index des gewälten Tabs merken
    Select
    Case $msg= $save
    IniWrite( "config.ini", "Titel", "Titel", GUICtrlRead($in))
    Case $Selecttab = 0 ; Index des Items Nullbasiert
    $reloaded = 0

    [/autoit] [autoit][/autoit] [autoit]

    Case $Selecttab = 1 ; Index des Items Nullbasiert
    If $reloaded = 0 Then
    ; Reload durchführen
    $reloaded = 1 ; Variable muss bei Programmstart auf "0" gesetzt sein
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    GUICtrlSetData($label,$titel)
    EndIf ; hier was passieren soll (_reload )
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
    • Offizieller Beitrag

    Hiermit kannst du in beiden Tabs etwas aktualisieren (anstatt der MsgBox).

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <GuiTab.au3>
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    Dim $aktivItem1 = 0, $aktivItem2 = 0
    GuiCreate( $titel, 1000, 800)
    $tab = GuiCtrlCreateTab(0, 0, 1000, 800)

    $tab1 = GuiCtrlCreateTabItem("Daten eingeben")
    $in = GUICtrlCreateInput ("test", 240, 280, 150, 20)
    $save = GUICtrlCreateButton("Speichern", 60, 390, 100)
    GUICtrlCreateTabItem("")

    $tab2 = GuiCtrlCreateTabItem("Daten auslesen")
    $label = GuiCtrlCreateLabel($titel, 30, 200)
    GUICtrlCreateTabItem("")



    GuiSetState()
    Do
    $msg = GUIGetMsg()
    $Status = _GUICtrlTabGetCurSel($tab)
    Select
    Case $msg= $save
    IniWrite( "config.ini", "Titel", "Titel", GUICtrlRead($in))
    Case $Status = 0 ; $tab1
    If $aktivItem1 = 0 Then
    MsgBox(0, '', "Tab-Item1 aktiv")
    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler") ; muss innerhalb der If-Schleife sein
    $aktivItem1 = 1
    $aktivItem2 = 0
    EndIf
    Case $Status = 1
    If $aktivItem2 = 0 Then
    MsgBox(0, '', "Tab-Item2 aktiv")
    $aktivItem2 = 1
    $aktivItem1 = 0
    EndIf
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Edit: Bernd war schneller, naja, lieber 2 Varianten als keine ;)

  • Ok danke funktionieren beide.

    Nur noch mal eine Frage dazu.
    Wenn ich das If $aktivItem2 = 0 Then weglassen und einfach nur die Befehle reinschreibe, führt er die Befehle andauernd aus. Also wie eine Enlosschleife. Warum?
    Wenn ich einen Button drücke führt er doch die Befehle auch nur einmal aus.

    • Offizieller Beitrag

    Ganz einfach, $Status hat bei jedem Schleifendurchgang den 0 oder 1, d.h. es wird bei jedem Schleifendurchgang auch "Case $Status = 0" oder "Case $Status = 1" abgearbeitet. Mit dem aktivitem1 und aktivitem2 wird dafür gesorgt das nur bei einem Statuswechsel von 0 auf 1 oder von 1 auf 0 die aktionen ausgeführt werden.

  • Ich hab noch ne Lösung gefunden, die mir jetzt am einfachsten erscheint.


    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    dim $test

    [/autoit] [autoit][/autoit] [autoit]

    $titel = IniRead( "config.ini", "Titel", "Titel", "Fehler")
    GuiCreate( $titel, 800, 600)
    $tab = GuiCtrlCreateTab(0, 0, 800, 600)

    GuiCtrlCreateTabItem("Daten eingeben")
    $in = GUICtrlCreateInput ("test", 240, 280, 150, 20)
    $save = GUICtrlCreateButton("Speichern", 60, 390, 100)
    GUICtrlCreateTabItem("")

    GuiCtrlCreateTabItem("Daten auslesen")
    $label = GuiCtrlCreateLabel($test, 100, 200)
    GUICtrlCreateTabItem("")

    [/autoit] [autoit][/autoit] [autoit]

    GuiSetState()

    $reloaded = 0
    Do
    $msg = GUIGetMsg()
    Select
    Case $msg= $save
    IniWrite( "config.ini", "test", "test", GUICtrlRead($in))
    Case $msg = $tab
    Switch GUICtrlRead($tab)
    Case 0 ;Tab1

    [/autoit] [autoit][/autoit] [autoit]

    Case 1 ;Tab2
    $test = IniRead( "config.ini", "test", "test", "Fehler")
    GUICtrlSetData($label,$test)
    EndSwitch
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Mit Switch gehts auch ohne das man mit if = 0 then und so arbeiten muß

    Naja ich sehe schon "Alle Wege führen nach Rom" :rofl:

  • Zitat

    Original von Spion


    Naja ich sehe schon "Alle Wege führen nach Rom" :rofl:

    Die meisten allerdings ins Forum :schild4:

    x)

    Dieser Beitrag wurde 9521 mal editiert, zum letzten Mal von Blubkuh: Morgen, 02:28.

    [autoit]

    If Not $Elephant Then $Irelephant = True

    [/autoit]