Problem bei GuiCtrlSetData und Groß/Kleinschreibung des 2. Parameters

  • Heyho,

    ich bin auf ein interessantes Phänomen gestoßen was doch störend ist.

    Ich habe folgende Funktion:

    [autoit]

    Func _Profile_auslesen($daten)

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

    GUICtrlSetData($daten, "")

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

    For $i = 1 To $ID Step 1
    $var = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\***\Profile\" & $i, "Profilname")
    If $var <> "" Then GUICtrlSetData($daten, $var)
    Next

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

    EndFunc

    [/autoit]

    Diese Funktion liest in der Registry geschriebene "Profile" aus -- könnte auch ne .ini sein --
    und schreibt diese in das entsprechende Gui (ob Liste, Combo,etc) und das Problem ist folgendes:

    Wenn $var z.B. "TEST" heißt und im 2. Durchlauf $var "test" lautet,
    so taucht in der Liste/Combo nur "TEST" auf.

    Um einen Fehler in meinem Script direkt auszuschließen, habe ich ein etwas allgemeineres Script geschrieben:

    [autoit]

    #include <GuiConstantsEx.au3>

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

    Local $var

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

    ; GUI
    GuiCreate("Sample GUI", 400, 400)

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

    GuiCtrlCreateList("", 5, 190, 100, 90)
    $var = "Test"
    GuiCtrlSetData(-1, $var)
    $var = "test"
    GUICtrlSetData(-1, $var)

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

    GuiSetState()
    While GuiGetMsg() <> $GUI_EVENT_CLOSE
    WEnd

    [/autoit]

    Auch hier tritt das gesagte Phänomen auf.. Hat mein AutoIT noch nen Bug? :/

    Gruß

    Prajoss

    "Never touch a running System!"

    Einmal editiert, zuletzt von Prajoss (23. Februar 2009 um 15:02)

  • Code
    If the "data" corresponds to an already existing entry it is set as the  default.
    If the "data" starts with GUIDataSeparatorChar or is an empty string  "" the previous list is destroyed.

    In deinem Beispiel wird der Eintrag "Test" mit "test" als default gesetzt - scheint nicht casesensitive zu sein.
    wenn du willst, daß der alte EIntrag überschrieben wird, dann:

    [autoit]

    GuiCtrlSetData(-1, "|" & $var)

    [/autoit]

    zum hinzufügen:

    [autoit]

    _GUICtrlListBox_AddString

    [/autoit]

    lgE

  • Nun habe ich noch eine Möglichkeit gefunden die Daten einzutragen ohne das genannte
    Problem zu auszulösen:

    [autoit]

    #include <GuiConstantsEx.au3>

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

    Local $var

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

    ; GUI
    GuiCreate("Sample GUI", 400, 400)

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

    GuiCtrlCreateList("", 5, 190, 100, 90)
    $var = "test|Test"
    GuiCtrlSetData(-1, $var)

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

    GuiSetState()
    While GuiGetMsg() <> $GUI_EVENT_CLOSE
    WEnd

    [/autoit]

    Damit hab natürlich einen Umweg gefunden aber weiß immernoch nich weshalb der Fehler auftritt,
    vllt fällt jemanden ja was ein, dann kann er es gerne hier reinschreiben (ich werde mich dieser
    Sache nicht mehr widmen).

    Gruß

    Prajoss

    Edit: Danke Eukalyptus :)

    "Never touch a running System!"

  • Hi,

    der Hintergrund ist, dass die Daten in einer Liste als String gehandhabt werden, egal ob Du "2" oder "Test" reinschreibst.

    Wenn man ohne weiteren Aufwand Strings vergleicht;

    $b1="test"
    $b2="Test"
    if $b1=$b2 then MsgBox(1,"","Gleich")

    dann ist "test" eben gleich "Test".


    Kanst Du nur mit StringCompare ( "string1", "string2" [, casesense] ) abfangen