Anklickbare Labels + Tabswitch/create

  • Hi
    Ich lasse für ein Programm ein paar Namen aus einer txt auslesen und diese in Labels auflisten. Nun möchte ich wenn der User auf ein Label klickt das dann ein TabItem mit dem geklickten Namen erstellt wird und auch automatisch dahingeswitcht.

    Wie kann ich dies lösen?

    Grüße
    Baaam

  • [autoit]

    Switch Guigetmsg
    Case $Button_CreateTab_Test
    GUICtrlCreateTabIteme("Test")
    ; GUICtrlCreateTabItem("")

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

    Case $Button_CreateTab_Test2
    GUICtrlCreateTabItem("Test2")
    ; GUICtrlCreateTabItem("")
    EndSwitch

    [/autoit]

    Bei den auskommentierten Sachen musst du gucken ob das benötigt wird (ich glaub schon), ich hoffe aber der Ansatz ist verständlich.

    mfg Ubuntu

  • So hab das noch bissl abgewandelt funzt alles. Nun hab ich nur das Prob das wenn ich dann geklickt hab das Tab erstellt ist dann is er immer noch beim 1. Tab und diesen zeigt er leer an.
    Woran liegt dies?
    Habe es schon mit

    [autoit]

    GUIsetstate(@sw_show)

    [/autoit]

    versucht doch das bringt nichts.

    Grüße

  • Super geil funzt

    Öhm noch nen Prob ich will das man per Button Close das Tab aber auch nur dieses Eine schließen kann nich das ganze Progg. Nun hab ich das wie bei allen anderen Buttons gemacht. Bei den anderen funktioniert es, bei dem Tabclose nicht -.-

    Hier mein Code zum Schließen:

    [autoit]

    GuiCtrlDelete($tabnahme1)

    [/autoit]

    Ist daran etwas falsch? Hab das halt so das der Button die $schliessen hat und diese in einem Switch per

    [autoit]

    Case $schliessen
    _Func6 ()

    [/autoit]

    Und dann halt was da oben steht in Func _Func6 ()
    ...
    EndFunc

    Warum passiert dann nichts wenn ich auf den Button klicke?

  • Hm ok das etwas durcheinander xD wenn man es noch kürzen kann schreibt mir bitte tipps =)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $file
    Global $name1
    Global $name2
    Global $schliessen
    Global $tabname1
    Global $tabname2

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

    GUIcreate("Zensuren")
    $time = GUICtrlCreateLabel(@HOUR & ':' & @MIN & ':' & @SEC, 300, 35, 80, 16)
    guictrlsetdata($time,@HOUR & ':' & @MIN & ':' & @SEC)
    GUICtrlCreateTab(20,35, 350, 350)
    GuiCtrlCreateTabItem("Klasse")
    $klasseinp = GuiCtrlCreateInput("",50,90,200,20)
    $suchen = GuiCtrlCreateButton("Klasse suchen",270,90,80,20)
    $namen = GuiCtrlCreateButton("Namen auslesen",150,150,100,30)
    $lbl1 = GuiCtrlCreateLabel("",70,230,70,100)
    $lbl2 = GuiCtrlCreateLabel("",140,230,70,100)
    $lbl3 = GuiCtrlCreateLabel("",210,230,70,100)
    $lbl4 = GuiCtrlCreateLabel("",280,230,70,100)
    $lbl5 = GuiCtrlCreateLabel("",70,250,70,100)
    $lbl6 = GuiCtrlCreateLabel("",140,250,70,100)
    $lbl7 = GuiCtrlCreateLabel("",210,250,70,100)
    $lbl8 = GuiCtrlCreateLabel("",280,250,70,100)

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

    $beenden1 = GuiCtrlCreateButton("Beenden",290,350,70,30)
    GuiCtrlCreateTabItem("Noten")
    $beenden = GuiCtrlCreateButton("Beenden",290,350,70,30)
    GUIsetstate(@sw_show)

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $suchen
    _Func1 ()
    Case $beenden
    _Func2 ()
    Case $beenden1
    _Func2 ()
    Case $namen
    _Func3 ()
    Case $lbl1
    _Func4()
    Case $lbl2
    _Func5 ()
    Case $schliessen
    _Func6 ()
    EndSwitch
    WEnd

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

    Func _Func1 ()
    $File = FileOpenDialog("Bitte Datei auswählen","","Textdateien(*.txt)")
    $datei1 = GuiCtrlSetData($klasseinp, $File)
    Sleep(500)
    MsgBox(0,"Erfolgreich", "Datei gefunden!")
    EndFunc

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

    Func _Func3 ()
    $name1 = FileReadLine($File, 1)
    $name2 = FileReadLine($File, 2)
    $name3 = FileReadLine($File, 3)
    $name4 = FileReadLine($File, 4)
    $name5 = FileReadLine($File, 5)
    $name6 = FileReadLine($File, 6)
    $name7 = FileReadLine($File, 7)
    $name8 = FileReadLine($File, 8)
    Sleep(1000)
    GuiCtrlSetData($lbl1,$name1)
    Sleep(200)
    GuiCtrlSetData($lbl2,$name2)
    Sleep(200)
    GuiCtrlSetData($lbl3,$name3)
    Sleep(200)
    GuiCtrlSetData($lbl4,$name4)
    Sleep(200)
    GuiCtrlSetData($lbl5,$name5)
    Sleep(200)
    GuiCtrlSetData($lbl6,$name6)
    Sleep(200)
    GuiCtrlSetData($lbl7,$name7)
    Sleep(200)
    GuiCtrlSetData($lbl8,$name8)
    EndFunc

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

    Func _Func4 ()
    $tabname1 = GuiCtrlCreateTabItem($name1)
    $schliessen = GuiCtrlCreateButton("Close",290,350,70,30)
    GUICtrlSetState($tabname1, $GUI_SHOW)
    EndFunc

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

    Func _Func5 ()
    $tabname2 = GuiCtrlCreateTabItem($name2)
    $schliessen = GuiCtrlCreateButton("Close",290,350,70,30)
    GUICtrlSetState($tabname1, $GUI_SHOW)
    EndFunc

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

    Func _Func6 ()
    GuiCtrlDelete($tabname1)
    GuiCtrlDelete($tabname2)
    EndFunc

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

    Func _Func2 ()
    Exit 0
    EndFunc

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

    ;--------------------------------------------------------------------------------------------------------------

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

    Hm ok hab den 1. Fehler war nen rechtschriebfehler in der variable
    hier im forum erkennt man das irgendiwe besser 8|
    hm jetzt der nächste fehler das er nen prob mit der löschfunktion des tabs hat
    mal suchen xD

    Ok auch diesen gefunden grrrr
    im forum sieht man sowas echt besser xD

    öhm ja wäre euch dankbar wenn ihr mir sagt wie ich mein script noch kürzen könnte

    2 Mal editiert, zuletzt von Baaam (9. Juni 2010 um 20:48)

  • Zitat

    Hm ok hab den 1. Fehler war nen rechtschriebfehler in der variable
    hier im forum erkennt man das irgendiwe besser 8|

    Kenn ich total, wleenn du immer vor der gleichen Formatierung (buchstabenabstand etc) sitzt, übersieht man voll viel ..

    Mit Arrays und For-Schleifen kannst du das auf die Hälfte reduzieren, aber soo arg lang ist es ja noch nicht

  • Hm naja es wird ja noch viel länger
    wie man sieht sind bis jetzt nur 2 labels anklickbar
    vorhanden sind bis jetzt 8
    wenn ich das auf meine klasse beziehe müssten es 22 sein
    da wird der code richtig derbst lang

    und nein mit arrays kenn ich mich nicht aus =(
    kannst mir vielleicht ne nette seite mit nem tut geben oder bissl was erklären?

    • Offizieller Beitrag

    Mal auf deine Fehler zurückkommend:

    1. Du erstellst ein Tabitem in der Gui und Schließt das ganze nicht mit GUICtrlCreateTabItem ("") ab.

    Zitat

    To create a new control on an existing tabitem use GUISwitch($hWin,$tabitem) to select it and just create your new control. Don't forget to close your tabitem creation with GUICtrlCreateTabItem("").


    2. Deine Controls $schliessen werden in beiden neuen Tabs erstellt, nur das zuletzt erstellte funzt, da die Variable überchrieben wird.

  • So ich hab mir das mit den Arrays mal angeschaut und das hier draus gemacht:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $File
    Global $schliessen
    Global $tabname1
    Global $tabname2
    Dim $arControl[8]
    Dim $arName[8]
    Dim $arTab[8]

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

    GUIcreate("Zensuren")
    $time = GUICtrlCreateLabel(@HOUR & ':' & @MIN & ':' & @SEC, 300, 35, 80, 16)
    guictrlsetdata($time,@HOUR & ':' & @MIN & ':' & @SEC)
    GUICtrlCreateTab(20,35, 350, 350)
    GuiCtrlCreateTabItem("Klasse")
    $klasseinp = GuiCtrlCreateInput("",50,90,200,20)
    $suchen = GuiCtrlCreateButton("Klasse suchen",270,90,80,20)
    $namen = GuiCtrlCreateButton("Namen auslesen",150,150,100,30)
    $arControl[0] = GuiCtrlCreateLabel("",70,230,70,100)
    $arControl[1] = GuiCtrlCreateLabel("",140,230,70,100)
    $arControl[2] = GuiCtrlCreateLabel("",210,230,70,100)
    $arControl[3] = GuiCtrlCreateLabel("",280,230,70,100)
    $arControl[4] = GuiCtrlCreateLabel("",70,250,70,100)
    $arControl[5] = GuiCtrlCreateLabel("",140,250,70,100)
    $arControl[6] = GuiCtrlCreateLabel("",210,250,70,100)
    $arControl[7] = GuiCtrlCreateLabel("",280,250,70,100)

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

    $beenden1 = GuiCtrlCreateButton("Beenden",290,350,70,30)
    GuiCtrlCreateTabItem("Noten")
    $beenden = GuiCtrlCreateButton("Beenden",290,350,70,30)
    GUIsetstate(@sw_show)

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $suchen
    _Func1 ()
    Case $beenden
    _Func2 ()
    Case $beenden1
    _Func2 ()
    Case $namen
    _Func3 ()
    Case $arControl[0]
    _Func4()
    Case $schliessen
    _Func6 ()
    EndSwitch
    WEnd

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

    Func _Func1 ()
    $File = FileOpenDialog("Bitte Datei auswählen","","Textdateien(*.txt)")
    $datei1 = GuiCtrlSetData($klasseinp, $File)
    Sleep(500)
    MsgBox(0,"Erfolgreich", "Datei gefunden!")
    EndFunc

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

    Func _Func3 ()
    $arName[0] = FileReadLine($File, 1)
    $arName[1] = FileReadLine($File, 2)
    $arName[2] = FileReadLine($File, 3)
    $arName[3] = FileReadLine($File, 4)
    $arName[4] = FileReadLine($File, 5)
    $arName[5] = FileReadLine($File, 6)
    $arName[6] = FileReadLine($File, 7)
    $arName[7] = FileReadLine($File, 8)
    Sleep(1000)
    For $i = 0 To 7
    GuiCtrlSetData($arControl[$i],$arName[$i])
    Next
    EndFunc

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

    Func _Func4 ()
    For $i = 0 to 5
    $arTab[0] = GuiCtrlCreateTabItem($arName[$i])
    $schliessen = GuiCtrlCreateButton("Close",290,350,70,30)
    GUICtrlSetState($artab[0], $GUI_SHOW)
    Next
    EndFunc

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

    Func _Func6 ()
    For $i = 0 to 5
    GuiCtrlDelete($arTab[$i])
    Next
    EndFunc

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

    Func _Func2 ()
    Exit 0
    EndFunc

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

    ;--------------------------------------------------------------------------------------------------------------

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

    Funktioniert soweit alles bis auf das Tabschließen. Ich kann nur 1 Tab schließen. Und er soll auch nur den Tab aufmachen auf dessen Name ich klicke und nich alle auf einmal.

    Könnte mir wer helfen?

    Grüße

    Einmal editiert, zuletzt von Baaam (9. Juni 2010 um 20:48)

  • du willst also soviele tabs hinzufügen wie man will und diese auch wieder schließen?

    zum verkürzen des scripts, geht es dir nur um ein kurzes script oder soll es noch schön lesbar sein?^^
    meistens leidet die lesbarkeit sehr unter dem verkürzen...

    PS: Bitte verwende Spoiler für die Quellcodes (einfach auf "SP" klicken)

    • Offizieller Beitrag

    @Baaam, dein neus Script hat immer noch die selben Fehler wie das alte, nur halt mit Array's.
    Schau dir mal meinen letzten Post an.

  • Den 2. Fehler sollte ich doch behoben haben oder? Weil $schliessen gibs nur noch 1 ma
    Schnitzel also es werden Namen ausgelesen und ausgegeben
    Wenn dann auf einen Namen geklickt wird soll ein Tab aufgehen mit das als Titel den angeklickten Namen hat.
    Dann soll dort ein Close Button sein der, wenn man auf ihn klickt, den Tab wieder schließt.

    Nochma @Raupi^^ öhm dein 1. Fehler wo du geschrieben hast versteh ich nicht so ganz.

    Grüße

    • Offizieller Beitrag

    Du mußt nach der Erstellung der Tabitems diesen mit GUICtrlCreateTabItem("") abschließen. Siehe Hilfe.
    Der 2. Fehler ist immernoch da. Du erstellst 6 Tabs und auf jedem den Close Button.

    [autoit]

    Func _Func4 ()
    For $i = 0 to 5
    $arTab[0] = GuiCtrlCreateTabItem($arName[$i])
    $schliessen = GuiCtrlCreateButton("Close",290,350,70,30);Dieser Button wird 6 mal erstellt.Nur der Button im 6. erstellten Tab ist aktiv weil du immer die Variable $schliessen überschreibst
    GUICtrlSetState($artab[0], $GUI_SHOW)
    Next
    EndFunc

    [/autoit]
  • Hi
    Wo genau meinst du das mit dem Tab?
    Und 2. ich find keine Lösung =(
    Köntest du mir einen Tipp geben?

    • Offizieller Beitrag

    Am einfachsten ist dein Problem im GUIOnEventMode zu lösen. So könnte es aussehen:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)
    Global $File
    Global $schliessen
    Global $tabname1
    Global $tabname2
    Dim $arControl[8]
    Dim $arName[8]
    Dim $arTab[8]
    Dim $arClose[8]
    $Gui = GUICreate("Zensuren")
    GUISetOnEvent($GUI_EVENT_CLOSE,"_Exit")
    $time = GUICtrlCreateLabel(@HOUR & ':' & @MIN & ':' & @SEC, 300, 35, 80, 16)
    GUICtrlSetData($time, @HOUR & ':' & @MIN & ':' & @SEC)
    GUICtrlCreateTab(20, 35, 350, 350)
    GUICtrlCreateTabItem("Klasse")
    $klasseinp = GUICtrlCreateInput("", 50, 90, 200, 20)
    $suchen = GUICtrlCreateButton("Klasse suchen", 270, 90, 80, 20)
    GUICtrlSetOnEvent(-1,"_Func1")
    $namen = GUICtrlCreateButton("Namen auslesen", 150, 150, 100, 30)
    GUICtrlSetOnEvent(-1,"_Func3")
    $arControl[0] = GUICtrlCreateLabel("", 70, 230, 70, 100)
    GUICtrlSetOnEvent(-1,"_Func4")
    $arControl[1] = GUICtrlCreateLabel("", 140, 230, 70, 100)
    GUICtrlSetOnEvent(-1,"_Func4")
    $arControl[2] = GUICtrlCreateLabel("", 210, 230, 70, 100)
    GUICtrlSetOnEvent(-1,"_Func4")
    $arControl[3] = GUICtrlCreateLabel("", 280, 230, 70, 100)
    GUICtrlSetOnEvent(-1,"_Func4")
    $arControl[4] = GUICtrlCreateLabel("", 70, 250, 70, 100)
    GUICtrlSetOnEvent(-1,"_Func4")
    $arControl[5] = GUICtrlCreateLabel("", 140, 250, 70, 100)
    GUICtrlSetOnEvent(-1,"_Func4")
    $arControl[6] = GUICtrlCreateLabel("", 210, 250, 70, 100)
    GUICtrlSetOnEvent(-1,"_Func4")
    $arControl[7] = GUICtrlCreateLabel("", 280, 250, 70, 100)
    GUICtrlSetOnEvent(-1,"_Func4")
    $beenden1 = GUICtrlCreateButton("Beenden", 290, 350, 70, 30)
    GUICtrlSetOnEvent(-1,"_Func2")
    GUICtrlCreateTabItem("Noten")
    $beenden = GUICtrlCreateButton("Beenden", 290, 350, 70, 30)
    GUICtrlSetOnEvent(-1,"_Func2")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)

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

    While 1
    sleep(50)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _Func1()
    $File = FileOpenDialog("Bitte Datei auswählen", "", "Textdateien(*.txt)")
    $datei1 = GUICtrlSetData($klasseinp, $File)
    MsgBox(0, "Erfolgreich", "Datei gefunden!")
    EndFunc ;==>_Func1

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

    Func _Func3()
    For $i= 0 to 7
    $arName[$i] = FileReadLine($File, $i+1)
    GUICtrlSetData($arControl[$i], $arName[$i])
    Next
    EndFunc ;==>_Func3

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

    Func _Func4()
    For $i = 0 To 7
    $arTab[$i] = GUICtrlCreateTabItem($arName[$i])
    GUISwitch($Gui, $arTab[$i])
    $arClose[$i] = GUICtrlCreateButton("Close", 290, 350, 70, 30)
    GUICtrlSetOnEvent(-1,"_Func6")
    GUICtrlCreateTabItem("")
    GUICtrlSetState($arTab[$i], $GUI_SHOW)
    Next
    EndFunc ;==>_Func4

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

    Func _Func6()
    For $i = 0 To 5
    GUICtrlDelete($arTab[$i])
    GUICtrlDelete($arClose[$i])
    Next
    EndFunc ;==>_Func6

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

    Func _Func2()
    Exit 0
    EndFunc ;==>_Func2

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

    ;--------------------------------------------------------------------------------------------------------------

    [/autoit]