Problem beim checken von RadioButtons



  • Hallo,

    Ich habe folgendes Problem:

    Ich habe in einem Dialogfeld mehrere RadioButtons, die zu zwei Gruppen gehören. In den Gruppen darf dann immer nur ein RadioButton aktiv sein. Bei der ersten Gruppe funktioniert das auch. Allerdings immer wenn ich einen Radiobutton der zweiten Gruppe drücke, verschwindet der aus der ersten Gruppe (der RadioButton der vorher an war ist nun aus). Wenn ich dann wieder einen RadioButton aus der ersten Gruppe checke bleibt die Eintrag in der zweiten erhalten. Ich finde den Fehler einfach nicht...

    Der Dialogfeld wird über Ressourcen erstellt:

    IDD_INTEROPT DIALOGEX 6,6,289,168
    CAPTION "Interface Optionen"
    FONT 8,"MS Sans Serif"
    STYLE WS_VISIBLE | WS_CAPTION | WS_SYSMENU
    EXSTYLE 0x00000000
    BEGIN
    
    ...
       CONTROL "Taskleiste",SHOW_TASK,"Button",BS_RADIOBUTTON | WS_CHILD | WS_VISIBLE,24,25,106,8,0x00000000
      CONTROL "Systray && Taskleiste",SHOW_SYSTASK,"Button",BS_RADIOBUTTON | WS_CHILD | WS_VISIBLE,24,37,106,8,0x00000000
      CONTROL "Systray",SHOW_SYS,"Button",BS_RADIOBUTTON | WS_CHILD | WS_VISIBLE,24,49,96,9,0x00000000
      CONTROL "Schließen",OIDC_GRP2,"Button",0x50000007,10,73,130,48,0x00000000
      CONTROL "Programm beenden",OIDC_RBN3,"Button",0x50010009,20,88,102,9,0x00000000
      CONTROL "Programm minimieren",OIDC_RBN4,"Button",0x50010009,20,101,108,11,0x00000000
    ...
    

    So werden die Klicks verarbeitet:

    case WM_COMMAND:
    			switch(LOWORD(wParam))
    			{
    ...
    				case SHOW_TASK:               //Nur in der Taskleiste anzeigen
    					CheckRadioButton(hwnd,SHOW_TASK,SHOW_SYS,SHOW_TASK);
    					akt_optionen.show = TASKBAR;
    					break;
    				case SHOW_SYSTASK:            //In Systray und Taskleiste anzeigen
    					CheckRadioButton(hwnd,SHOW_TASK,SHOW_SYS,SHOW_SYSTASK);
    					akt_optionen.show = SYSTASK;
    					break;
    				case SHOW_SYS:                //Nur im Systray anzeigen
    					CheckRadioButton(hwnd,SHOW_TASK,SHOW_SYS,SHOW_SYS);
    					akt_optionen.show = SYSTRAY;
    					break;
    				case OIDC_RBN3:                //Programm bei X beenden
    					CheckRadioButton(hwnd,OIDC_RBN3,OIDC_RBN4,OIDC_RBN3);
    					akt_optionen.CloseOnX = true;
    					break;
    				case OIDC_RBN4:                //Programm bei X minimieren
    					CheckRadioButton(hwnd,OIDC_RBN3,OIDC_RBN4,OIDC_RBN4);
    					akt_optionen.CloseOnX = false;
    					break;
    ...
    			}
    	      return true;
    


  • is kein Fehler...is modal mann



  • Blödimann schrieb:

    is kein Fehler...is modal mann

    Das hat nix mit modal / nicht modal zu tun, sondern liegt daran,
    dass du den Stil WS_GROUP beim ersten Radiobutton einer Gruppe setzen musst.

    Beispiel:

    -- Gruppe 1 --
    ( ) Radio 1 WS_GROUP
    ( ) Radio 2
    ( ) Radio 3

    -- Gruppe 2 --
    ( ) Radio 4 WS_GROUP
    ( ) Radio 5
    ( ) Radio 6

    Doku findest du hier:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Windowing/Windows/WindowReference/WindowStyles.asp



  • @tvdog: thk, das wars


Anmelden zum Antworten