Checkbox.. es darf nur eine ausgewählt werden können

  • Hi,

    hab eine kleine GUI wo man 3 Checkboxen anwählen kann. Ich brings einfach nicht fertig, dass nur eine der 3 Boxen gewählt werden darf.

    [autoit]

    ;Gibt es R;S;T -> frage nach wie wir uns verbinden sollen
    If $dsr = "READY" And $dss = "READY" And $dst = "READY" Then
    ; GUI alle Laufwerke schon gemappt
    Opt("GUIOnEventMode", 1)
    $Form1_1 = GUICreate("PC 2 MC", 326, 216, 293, 225)
    $Group1 = GUICtrlCreateGroup("Die erlaubten Laufwerke sind schon verbunden", 0, 0, 321, 209)
    $Label1 = GUICtrlCreateLabel("Bitte mindestens ein Laufwerk auswählen, das getrennt werden kann.", 32, 24, 275, 34)
    $Buttonok = GUICtrlCreateButton("OK", 72, 160, 75, 25, 0)
    $Buttonab = GUICtrlCreateButton("Abbrechen", 160, 160, 75, 25, 0)
    $Label2 = GUICtrlCreateLabel("Welches Laufwerk soll getrennt werden??", 32, 140, 203, 17)
    $CheckboxR = GUICtrlCreateCheckbox("", 32, 64, 17, 17)
    $CheckboxS = GUICtrlCreateCheckbox("", 32, 88, 17, 17)
    $CheckboxT = GUICtrlCreateCheckbox("", 32, 112, 17, 17)
    $Label3 = GUICtrlCreateLabel("", 56, 64, 260, 17)
    $Label4 = GUICtrlCreateLabel("", 56, 88, 260, 17)
    $Label5 = GUICtrlCreateLabel("", 56, 112, 260, 17)
    $Label6 = GUICtrlCreateLabel("R:", 8, 64, 17, 17)
    $Label7 = GUICtrlCreateLabel("S:", 8, 88, 17, 17)
    $Label8 = GUICtrlCreateLabel("T:", 8, 112, 17, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlSetData($Label3, $uncR[0])
    GUICtrlSetData($Label4, $uncS[0])
    GUICtrlSetData($Label5, $uncT[0])
    GUISetState()
    ;GUI Funkionen
    GUICtrlSetOnEvent($Buttonok, "Create")
    GUICtrlSetOnEvent($Buttonab, "CLOSEClicked")
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

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

    While 1
    Sleep(100)
    WEnd

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

    EndIf
    Func create()
    $ausgabe1 = $CheckboxR And BitAND(GUICtrlRead($CheckboxR), $GUI_CHECKED) = $GUI_CHECKED
    $ausgabe2 = $CheckboxS And BitAND(GUICtrlRead($CheckboxS), $GUI_CHECKED) = $GUI_CHECKED
    $ausgabe3 = $CheckboxT And BitAND(GUICtrlRead($CheckboxT), $GUI_CHECKED) = $GUI_CHECKED
    If $ausgabe1 = 1 Then
    DriveMapDel("R:")
    Sleep(5000)
    DriveMapAdd("R:", $SHARE & $ESPlatz, 0, "USER", "PW")
    Run("c:\WINDOWS\explorer.exe R:\")
    Exit
    ElseIf $ausgabe2 = 1 Then
    DriveMapDel("S:")
    Sleep(5000)
    DriveMapAdd("S:", $SHARE & $ESPlatz, 0, "USER", "PW")
    Run("c:\WINDOWS\explorer.exe S:\")
    Exit
    ElseIf $ausgabe3 = 1 Then
    DriveMapDel("T:")
    Sleep(5000)
    DriveMapAdd("T:", $SHARE & $ESPlatz, 0, "USER", "PW")
    Run("c:\WINDOWS\explorer.exe T:\")
    Exit
    Else
    MsgBox(0, "", "es wurde nichts ausgewählt!")
    EndIf
    GUISetState(@SW_HIDE)

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

    EndFunc ;==>create

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

    Exit

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

    Func CLOSEClicked()
    Exit
    EndFunc ;==>CLOSEClicked

    [/autoit]


    Bis jetzt bin ich ganz dolle stolz, dass es soweit funktioniert... es könnte aber sein, dass jemand 2 Chckboxen auswählt und dann geht es nicht mehr.. Jemand eine Idee???

    Gruss Neurobert

    Einmal editiert, zuletzt von neurobert (17. Juli 2009 um 10:17)

  • Hi,

    ja könnte ich, aber der Unterschied sind dann doch nur runde oder eckige Kästchen.
    Das ist nur ein Ausschnitt aus dem kpl. Script. Da ich noch nicht fertig bin, wollte ich noch nicht alles hochladen.
    Aber wenns hilft:

    [autoit]

    #include <Excel.au3>
    #include <Array.au3>
    #include <NetShare.au3>
    #include <GUIConstants.au3>
    #include <File.au3>
    #include <WinNet.au3>

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

    ; öffne die Excel-Datei vesteckt
    $pcliste = _ExcelBookOpen(@WorkingDir & "\Computerliste.xls", 0, 1)
    ;Liest in Zeile 1 Spalte 1 alle Werte Vertikal bis 200
    Local $avArray = _ExcelReadArray($pcliste, 1, 1, 200, 1)
    ;Finde einen Wert, der mit der Systemvariablen "Computername" identisch ist
    Local $TXResult = _ArrayFindAll($avArray, @ComputerName)

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

    If $TXResult = -1 Then
    MsgBox(0, "Keine Verbindung", "Ihr Computer wurde nicht gefunden", 10)
    _ExcelBookClose($pcliste, 0, 0)
    Exit
    EndIf

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

    ;Setze die Variable
    Local $Platz = $TXResult[0]

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

    ;Bestimme anhand der Vorgabe mit welchem Platz wir uns verbinden
    Local $ESPlatz = _ExcelReadCell($pcliste, $Platz + 1, 2)

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

    ;Welche Laufwerke dürfen verwendet werden und wie ist ihr Zustand
    Global $SHARE = "\\psys4000.zrh.prod\PC2AVID$\"
    $dsr = DriveStatus("R:\")
    $dss = DriveStatus("S:\")
    $dst = DriveStatus("T:\")

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

    Local $Laufwerk[3]
    $Laufwerk[0] = "R"
    $Laufwerk[1] = "S"
    $Laufwerk[2] = "T"

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

    ;gibt es die Datei _ESPlatz.tpc auf R;S;T ??
    If FileExists("R:\_" & $ESPlatz & ".TPC") Then
    Run("c:\WINDOWS\explorer.exe R:\")
    _ExcelBookClose($pcliste, 0, 0)
    Exit
    ElseIf FileExists("S:\_" & $ESPlatz & ".tpc") Then
    Run("c:\WINDOWS\explorer.exe S:\")
    _ExcelBookClose($pcliste, 0, 0)
    Exit
    ElseIf FileExists("T:\_" & $ESPlatz & ".tpc") Then
    Run("c:\WINDOWS\explorer.exe T:\")
    _ExcelBookClose($pcliste, 0, 0)
    Exit
    EndIf

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

    ;gibt es R: nicht -> verbinde mit R:
    If $dsr = "INVALID" Then
    DriveMapAdd("R:", $SHARE & $ESPlatz, 0, "USER", "PW")
    _FileCreate("R:\_" & $ESPlatz & ".TPC")
    Run("c:\WINDOWS\explorer.exe R:\")
    _ExcelBookClose($pcliste, 0, 0)
    Exit
    ElseIf $dss = "INVALID" Then
    ;gibt es R: -> verbinde mit S:
    DriveMapAdd("S:", $SHARE & $ESPlatz, 0, "USER", "PW")
    _FileCreate("S:\_" & $ESPlatz & ".TPC")
    Run("c:\WINDOWS\explorer.exe S:\")
    _ExcelBookClose($pcliste, 0, 0)
    Exit
    ElseIf $dst = "INVALID" Then
    ;gibt es R und S -> dann verbinde mit T:
    DriveMapAdd("T:", $SHARE & $ESPlatz, 0, "USER", "PW")
    _FileCreate("T:\_" & $ESPlatz & ".TPC")
    Run("c:\WINDOWS\explorer.exe T:\")
    _ExcelBookClose($pcliste, 0, 0)
    Exit
    EndIf

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

    ; UNC Pfad der gemappten Laufwerke in Variable schreiben
    $uncR = _WinNet_GetUniversalName("R:")
    $uncS = _WinNet_GetUniversalName("S:")
    $uncT = _WinNet_GetUniversalName("T:")

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

    ;Gibt es R;S;T -> frage nach wie wir uns verbinden sollen
    If $dsr = "READY" And $dss = "READY" And $dst = "READY" Then
    ; GUI alle Laufwerke schon gemappt
    Opt("GUIOnEventMode", 1)
    $Form1_1 = GUICreate("PC 2 MC", 326, 216, 293, 225)
    $Group1 = GUICtrlCreateGroup("Die erlaubten Laufwerke sind schon verbunden", 0, 0, 321, 209)
    $Label1 = GUICtrlCreateLabel("Bitte mindestens ein Laufwerk auswählen, das getrennt werden kann.", 32, 24, 275, 34)
    $Buttonok = GUICtrlCreateButton("OK", 72, 160, 75, 25, 0)
    $Buttonab = GUICtrlCreateButton("Abbrechen", 160, 160, 75, 25, 0)
    $Label2 = GUICtrlCreateLabel("Welches Laufwerk soll getrennt werden??", 32, 140, 203, 17)
    $CheckboxR = GUICtrlCreateCheckbox("", 32, 64, 17, 17)
    $CheckboxS = GUICtrlCreateCheckbox("", 32, 88, 17, 17)
    $CheckboxT = GUICtrlCreateCheckbox("", 32, 112, 17, 17)
    $Label3 = GUICtrlCreateLabel("", 56, 64, 260, 17)
    $Label4 = GUICtrlCreateLabel("", 56, 88, 260, 17)
    $Label5 = GUICtrlCreateLabel("", 56, 112, 260, 17)
    $Label6 = GUICtrlCreateLabel("R:", 8, 64, 17, 17)
    $Label7 = GUICtrlCreateLabel("S:", 8, 88, 17, 17)
    $Label8 = GUICtrlCreateLabel("T:", 8, 112, 17, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlSetData($Label3, $uncR[0])
    GUICtrlSetData($Label4, $uncS[0])
    GUICtrlSetData($Label5, $uncT[0])
    GUISetState()
    ;GUI Funkionen
    GUICtrlSetOnEvent($Buttonok, "Create")
    GUICtrlSetOnEvent($Buttonab, "CLOSEClicked")
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")

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

    While 1
    Sleep(100)
    WEnd

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

    EndIf
    Func create()
    $ausgabe1 = $CheckboxR And BitAND(GUICtrlRead($CheckboxR), $GUI_CHECKED) = $GUI_CHECKED
    $ausgabe2 = $CheckboxS And BitAND(GUICtrlRead($CheckboxS), $GUI_CHECKED) = $GUI_CHECKED
    $ausgabe3 = $CheckboxT And BitAND(GUICtrlRead($CheckboxT), $GUI_CHECKED) = $GUI_CHECKED
    If $ausgabe1 = 1 Then
    DriveMapDel("R:")
    Sleep(5000)
    DriveMapAdd("R:", $SHARE & $ESPlatz, 0, "USER", "PW")
    Run("c:\WINDOWS\explorer.exe R:\")
    Exit
    ElseIf $ausgabe2 = 1 Then
    DriveMapDel("S:")
    Sleep(5000)
    DriveMapAdd("S:", $SHARE & $ESPlatz, 0, "USER", "PW")
    Run("c:\WINDOWS\explorer.exe S:\")
    Exit
    ElseIf $ausgabe3 = 1 Then
    DriveMapDel("T:")
    Sleep(5000)
    DriveMapAdd("T:", $SHARE & $ESPlatz, 0, "USER", "PW")
    Run("c:\WINDOWS\explorer.exe T:\")
    Exit
    Else
    MsgBox(0, "", "es wurde nichts ausgewählt!")
    EndIf
    GUISetState(@SW_HIDE)

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

    EndFunc ;==>create

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

    Exit

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

    Func CLOSEClicked()
    Exit
    EndFunc ;==>CLOSEClicked

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

    Exit

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

    Die Idee ist: es dürfen zum mounten nur Laufwerk R;S und T genommen werden. Auf dem Server gibt es verschiedene Verzeichnisse für verschiedenen Arbeitsplätze. Jetzt wird in einer Excel-Liste der Computername abgefragt und die Verbindung immer mit dem richtigen Verzeichnis hergestellt.
    Wenn aber schon R;S und T durch andere Mounts belegt sind soll der User eines davon auswählen können und das wird dann "geunmounted"(geiles Wort) und wieder mit dem richtigen Ordner gemounted. Hoffe das war verständlich genug :)

    Lieben Gruss

    Neurobert

  • Soweit ich das verstanden habe, könntest du das so lösen:

    [autoit]

    $CheckboxR = GUICtrlCreateCheckbox("", 32, 64, 17, 17)
    GUICtrlSetOnEvent($CheckboxR, "_CheckBoxen")
    $CheckboxS = GUICtrlCreateCheckbox("", 32, 88, 17, 17)
    GUICtrlSetOnEvent($CheckboxR, "_CheckBoxen")
    $CheckboxT = GUICtrlCreateCheckbox("", 32, 112, 17, 17)
    GUICtrlSetOnEvent($CheckboxR, "_CheckBoxen")

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

    Func _CheckBoxen()
    Select
    Case @GUI_CtrlId = $CheckboxR
    GUICtrlSetState($CheckBoxS, $GUI_UNCHECKED)
    GUICtrlSetState($CheckBoxT, $GUI_UNCHECKED)
    Case @GUI_CtrlId = $CheckboxS
    GUICtrlSetState($CheckBoxT, $GUI_UNCHECKED)
    GUICtrlSetState($CheckBoxR, $GUI_UNCHECKED)
    Case @GUI_CtrlId = $CheckboxT
    GUICtrlSetState($CheckBoxR, $GUI_UNCHECKED)
    GUICtrlSetState($CheckBoxS, $GUI_UNCHECKED)
    EndSelect
    EndFunc

    [/autoit]

    Is nur mal schnell geschrieben. :)

    Zitat

    [Heute, 11:39] Raupi: Soll ich es dir machen?
    [Heute, 11:47] BugFix: "Soll ich es dir machen? " - also Raupi !! bitte nicht so öffentlich :rofl:

    Zitat

    [Heute, 11:51] BugFix: und ich werde es mir jetzt machen - das Mittagessen :P

    AMsg UDF v1.00.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%
    OwnStyle UDF Version 1.10.00 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 100%

  • AFAIK ist es so, dass wenn du ein Group-steuerelement nimmst und 3 Radio-Buttons reinsetzt dann ist automatisch nur eine auswählbar. Das ist ja auch eigentlich der Grundlegende unterschied zwischen den 2 Steuerelementen. Ich würde dir auch die Benutzung von Radio-Buttons empfehlen, so erkennt der Benutzer auch dass nur eine der Optionen gewählt werden kann.

  • Hi,

    danke für die schnelle Hilfe, ich werds gleich morgen ausprobieren.
    GUICtrlCreateGroup hatte ich ja schon drin, aber scheinbar an der falschen Stelle.
    Naja.. mal sehen..

    lg

    norbert

  • Hi,

    habs mit der Gruppierung und Radio Buttons gemacht und es funzt.

    [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("PC 2 MC", 316, 238, 347, 263)
    GUISetIcon("M:\Daten\PCMC_Transfer\0.ico")
    $GroupBox1 = GUICtrlCreateGroup("", 8, 1, 297, 193)
    $Label1 = GUICtrlCreateLabel("Die erlaubten Laufwerke sind schon verbunden:", 16, 16, 231, 17)
    $Label2 = GUICtrlCreateLabel("Bitte ein Laufwerk auswählen, das gretrennt werden soll.", 16, 32, 270, 17)
    $Radio1 = GUICtrlCreateRadio("", 40, 64, 257, 17)
    $Radio2 = GUICtrlCreateRadio("", 40, 88, 257, 17)
    $Radio3 = GUICtrlCreateRadio("", 40, 112, 257, 17)
    $Label3 = GUICtrlCreateLabel("R:", 24, 64, 15, 17)
    $Label4 = GUICtrlCreateLabel("S:", 24, 88, 14, 17)
    $Label5 = GUICtrlCreateLabel("T:", 24, 112, 14, 17)
    $Label6 = GUICtrlCreateLabel("Welches Laufwerk soll getrennt werden?", 40, 160, 197, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Buttonok = GUICtrlCreateButton("&OK", 65, 203, 75, 25, 0)
    $Buttonab = GUICtrlCreateButton("&Abbrechen", 162, 203, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit]

    Danke

    Ich schliesse den Thread ab

    norbert