Wert einer Radiobox auslesen



  • estartu schrieb:

    Ein Radiobutton ist auch nur ein Button: Versuch mal GetCheck bzw. SetCheck.

    estartu schrieb:

    Liegen die Radiobuttons in der Taborder DIREKT hintereinander?
    Hat die erste das Group-Flag?
    Dann sollte es gehen.

    - Group-Flag hat keins von beiden, Taborder DIREKT sagt mir leider nichts!

    Bekomme immer nen Absturz, wenn ich das so lösen will:

    DDX_Radio(pDX, IDC_RADIOBOX1, m_radiobox1);
    


  • Mupfel schrieb:

    estartu schrieb:

    Liegen die Radiobuttons in der Taborder DIREKT hintereinander?
    Hat die erste das Group-Flag?
    Dann sollte es gehen.

    - Group-Flag hat keins von beiden, Taborder DIREKT sagt mir leider nichts!

    Welche Zahlen stehen an den Radiobuttons, wenn du Strg+D drückst. (Das ist die Taborder.)

    Bekomme immer nen Absturz, wenn ich das so lösen will:

    DDX_Radio(pDX, IDC_RADIOBOX1, m_radiobox1);
    

    Ist der Absturz ein ASSERT? Dann drück mal Wiederholen und zeigt, wo du landest. Ich vermute, dass ihm das Groupflag fehlt.
    🙂



  • estartu schrieb:

    Liegen die Radiobuttons in der Taborder DIREKT hintereinander?
    Hat die erste das Group-Flag?
    Dann sollte es gehen.

    OK - 1
    Abbechen - 2
    RadioBox1 - 7
    RadioBox2 - 8
    RadioBox3 - 5
    RadioBox4 - 6

    Group-Flag hab ich nicht gesetzt!

    estartu schrieb:

    Ist der Absturz ein ASSERT? Dann drück mal Wiederholen und zeigt, wo du landest. Ich vermute, dass ihm das Groupflag fehlt.
    🙂

    Also der Absturz ist ein ASSERT!



  • Okay, dann Klick bitte mal in der folgenden Reihenfolge auf die Zahlen neben den Controls:
    RadioBox1
    RadioBox2
    RadioBox3
    RadioBox4

    Wenn du das System durchschaut hast, kannst du die anderen Nummern (wenn du magst) auch anpassen - musst aber nicht.
    Diese Zahlen sind die Taborder, d.h. in dieser Reihenfolge werden sie angesprungen, wenn du die Tab-Taste drückst.

    Und setz bei RadioBox1 mal das Gruppenflag.
    Dann sollte auch der ASSERT weg sein.



  • *SYSTEM DURCHSCHAUT*

    Gut die Reihenfolge stimmt, bei den Eigenschaften hab ich der ersten Radiobox bei Gruppe "TRUE" gegeben. Und dennoch besteht weiterhin der misteriöse ASSERT Fehler, auf den ich keine Lösung habe. 😞



  • Mupfel schrieb:

    Gut die Reihenfolge stimmt, bei den Eigenschaften hab ich der ersten Radiobox bei Gruppe "TRUE" gegeben. Und dennoch besteht weiterhin der misteriöse ASSERT Fehler, auf den ich keine Lösung habe. 😞

    Dann mach doch mal das, um was ich dich schon einige Posts vorher gebeten habe:

    estartu schrieb:

    Ist der Absturz ein ASSERT? Dann drück mal Wiederholen und zeig, wo du landest.



  • Oh sorry mein Fehler, hab ich leider überlesen.

    Ich lande genau hier dort, wo der böse Smiley sitzt!

    void AFXAPI DDX_Radio(CDataExchange* pDX, int nIDC, int& value)
    	// must be first in a group of auto radio buttons
    {
    	pDX->PrepareCtrl(nIDC);
       HWND hWndCtrl;
       pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
    
    	 :rage: ASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);
    	ASSERT(::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON);
    
    	if (pDX->m_bSaveAndValidate)
    		value = -1;     // value if none found
    
    	// walk all children in group
    	int iButton = 0;
    	do
    	{
    		if (::SendMessage(hWndCtrl, WM_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON)
    		{
    			// control in group is a radio button
    			if (pDX->m_bSaveAndValidate)
    			{
    				if (::SendMessage(hWndCtrl, BM_GETCHECK, 0, 0L) != 0)
    				{
    					ASSERT(value == -1);    // only set once
    					value = iButton;
    				}
    			}
    			else
    			{
    				// select button
    				::SendMessage(hWndCtrl, BM_SETCHECK, (iButton == value), 0L);
    			}
    			iButton++;
    		}
    		else
    		{
    			TRACE(traceAppMsg, 0, "Warning: skipping non-radio button in group.\n");
    		}
    		hWndCtrl = ::GetWindow(hWndCtrl, GW_HWNDNEXT);
    
    	} while (hWndCtrl != NULL &&
    		!(GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP));
    }
    


  • Hmm, sehr komisch...

    ASSERT(::GetWindowLong(hWndCtrl, GWL_STYLE) & WS_GROUP);
    

    heißt, dass das Groupflag (WS_GROUP) nicht gesetzt ist.
    Du sagst aber, das hättest du gemacht.

    Kontrollier das bitte nochmal.



  • Gut ich hab jetzt nochmal eine Gruppe hinzugefügt geht auch ohne Fehler nur, er vertauscht irgendwie die Radioboxen, genau umgekehrt und wenn ich eine anklicke dann bleiben alle markiert. Dies ist eigentlich nicht Sinn und Zweck einer Radiobox



  • Irgendwas läuft bei dir böse falsch... 😕
    Kannst du mir das Projekt mal zuschicken?
    (Ohne Debugordner, spart Platz.)



  • Sorry dies ist leider nicht möglich. Ich hab das Problem über einen Static Cast gelöst. Ich spreche einfach die Radiobuttons direkt an, funktioniert einwandfrei. Ist vielleicht nicht die beste Lösung, aber es erfüllt seinen Zweck. Warum die andere vorgehensweise nicht funktioniert hat, ist misteriös.

    Vielen Dank für die Zeit die du dir genommen hast! 👍


Anmelden zum Antworten