Wie legt man eine Wertvariable für einen Radiobutton in VC7 an?



  • Hallo,
    ich stehe gerade auf dem Schlauch oder ich bin einfach zu doof....HILFE.

    Arbeite jetzt seit kurzem erst mit Visual .NET und habe meine alte SW übernommen. Das passt auch alles ganz gut.

    So, jetzt habe ich 2 Radio-Buttons (in einer Gruppe) in einem Dialog hinzugefügt.
    Als Membervariable bietet mir .NET dann eine CButton-Variable an.
    So weit, so gut.

    Über die Methode GetCheck() bekomme ich ja den Index des ausgewählten Radio-Buttons. Wunderbar.....!
    Aber wie setze ich manuell einen Radio-Button?!? 😕
    Normalerweise doch z.B. so

    CheckRadioButton(IDC_RADIO_OFFLINE, IDC_RADIO_ONLINE_DGPS, IDC_RADIO_OFFLINE);
    

    oder?
    Aber irgendwie wird dann der ausgewählte Radio-Button im Dlg nicht "gesetzt" (also nicht markiert).
    Muss man da noch eine explizites Update (ausser UpdateData(FALSE) ) aufrufen? 😕

    Irgendwie war das unter Visual Studio 6.0 mit int-Werten als Member viel einfacher (oder ich bin zu doof!).

    Danke für Eure Hilfe und entschuldigt die doofe Frage.

    Gruss
    S.



  • Int-Werte sollten trotzdem noch funktionieren. 😕
    Hast du SetCheck schon versucht? 🙂



  • Hallo estartu,

    SetCheck habe ich schon probiert...aber damit setze ich ja nur den Radio-Button, der den Gruppenstatus besitzt. Setze ich den, wird DIESER Radio Btn aktiviert. Setze ich den NICHT, wird KEIN Radio-Btn gesetzt. 😕

    Füge ich bei meinem RadioBtn unter .NET eine Variable hinzu, so wird mir als CONTROL CButton und als VALUE bool angeboten....aber irgendwie bringen mich beide Varianten nicht weiter.

    Ausserdem werden diese Variablen und entsprechende Funktionen (OnClick.... etc. ) NICHT mehr in die MessageMap aufgenommen (so wie unter VS 6.0)...... 😕

    Irgendwie bin ich gerade ziemlich verwirrt.....!

    Danke für Deine Hilfe.

    Gruss
    S.



  • Value sollte es sein. 😕
    Und die Variable müsste in DoDataExchange landen, nicht in der MessageMap.



  • Sorry,
    habe mich FALSCH ausgedrückt.

    Schon klar das die Member in der Rubrik AFX_DATA landen sollten....aber das tun sie einfach nicht, sondern werden wie einfache public-Member eingefügt.

    Und die Methoden wie z.B.:

    afx_msg void OnBnClickedRadioOnlineDgps();
    afx_msg void OnBnClickedOffline();
    

    werden eben NICHT der MessageMap hinzugefügt, sondern ebenso als public-Methoden.

    Warum?!? 😕

    In dem "Variable hinzufügen"-DLG wird mir unter der Rubrik "Values" nur "bool" angeboten. Ändere ich dies manuell in "int" um wird mir auch nur eine public-int-Variable hinzugefügt, welche immer den Wert "-1" besitzt.

    Zweifle langsam an mir (und an meinem Verständnis für MFC) 😉

    Gruss
    S.



  • Stefan H schrieb:

    Zweifle langsam an mir (und an meinem Verständnis für MFC) 😉

    Gruss
    S.

    Den Zweifeln schließe ich mich an - für mich.
    Ich kriege es auch nicht hin, wollte es gerade mal versuchen (mit VC7). 😮
    Zur Not schreib es von Hand rein, bis sich jemand findet, der uns das erklärt. 🙄

    Im Header

    int m_nRadio;
    

    Im Komstruktor

    m_nRadio = -1; // Nix wählen
    

    DoDataExchange

    DDX_Radio(pDX, IDC_RDO_RADIO, m_nRadio);
    

    Das sollte reichen. Denk daran, dass die in der Taborder hintereinander liegen müssen und der erste das Gruppen-Flag haben muss. 🙂

    Sorry, dass ich es nicht gleich ausprobiert habe, aber ich konnte mir nicht vorstellen, dass das SO GUT versteckt ist. 😞



  • Hey,

    das beruhigt mich ja ungemein das es Dir auch irgendwie suspekt vorkommt....und verringert meine Zweifel an mir selbst 😉

    Danke für Deine Hilfe....dann muss man es halt wieder manuell machen ;-/
    Aber das ist mit Sicherheit "nicht das Gelbe vom Ei" (isn´t the yellow of the egg 😉

    Aber gut, vielleicht gibt es ja noch jemanden hier der uns darüber aufklärt und eine ganz simple Lösung verrät 😉

    Gruss
    S.



  • Ändere mal den Threadtitel auf:
    Wie legt man eine Wertvariable für einen Radiobutton in VC7 an?

    Das könnte die Chancen erhöhen.

    Stefan H schrieb:

    Aber das ist mit Sicherheit "nicht das Gelbe vom Ei" (isn´t the yellow of the egg 😉

    Aber man kann arbeiten. 😃



  • Hallo,

    habe jetzt mal wie estartu vorgeschlagen die Wertvariable manuell hinzugefügt.
    Setze ich diese Variable manuell auf einen bestimmten Wert, z.B. "0" wird der entsprechende RAdio-Button auch gesetzt.

    JEDOCH verändert sich diese Wertvariable NICHT, auch nicht wenn man auf einen anderen RadioButton drückt.
    Bsp.:

    void CAuxSystems::OnBnClickedRadioOnlineDgps()
    //-----------------------------------------------------------------------------------------------
    {
    	// Member aktualisieren
    	UpdateData(TRUE);
    
    	// Test	-> wenn ausgewählt, dann 1
    	int x = m_nOfflineMode;	
    }
    

    Die Wertvariable m_nOfflineMode verändert ihren Wert einfach nicht.

    Woran kann das liegen? 😕

    Die Zweifel an mir und meinem Verständnis von .NET halten an......... 😃
    Im gleichen Dialog habe ich schon eine Radio-Button-Gruppe aus Visual Studio 6.0 mit einem int-Wert als Steuerelementvariable.....funktioniert einwandfrei und es ist kein Unterschied zu dem jetzt von mir manuell hinzugefügten zu erkennen.
    Also wo ist das Problem.....?!?!? 😕

    Gruss
    S.



  • Hallo,

    langsam drehe ich ein bisschen am Rad.....! 😕
    Wie funktionieren denn diese Radio-Buttons unter .NET?!?

    Habe mein Programm, bzw. schon unter Visual Studio 6.0 erstellte Radio Buttons nochmal genauer untersucht und mir die Vorgehensweise im DEBUG-Modus genauer angeschaut.

    Für eine Radio-Btn-Gruppe mit 2 RadioBtns wurde für einen eine int-Steuerelementvariable angelegt, diesen Button zusätzlich als Gruppe festegelegt und auf die Tab-Reihenfolge geachtet.....so weit doch alles richtig, oder?

    Hierfür entsprechend die Methoden für das Klicken auf einen Radio-Btn.....!
    In diesen Funktionen konnte man doch dann mit folgendem Quelltext

    // ----------------------------------------------------------------------------
    void CKlasse::OnRadio2() 
    // ----------------------------------------------------------------------------
    {
            int x = m_nSVariable;
    
    	// Variablen aktualisieren
    	UpdateData(TRUE);		// -> m_nSVariable = 0	
    
            x = m_nSVariable;
    }
    

    normalerweise direkt die Veränderung beobachten.
    Also, Bsp.:
    Radio-Btn 1 ist gesetzt und die entsprechende Variable m_nsVariable besitzt den Wert 1.
    So, jetzt drücke ich RadioBtn2 (siehe Fkt) und vor UpdateData() wäre doch mein x gleich 1 und nach dem UpdateData() dann 0......oder?

    Jetzt unter .NET funktioniert das so irgendwie nicht mehr....die Variablen werden zwar "irgendwann" gesetzt....aber nicht nach dem Aufruf von UpdateData, sondern viel später in den MFC-Untiefen......!
    Ist natürlich saudoof wenn dieses Ergebnis meinen weiteren Programmablauf beeinflusst.....WARUM ist das so, bzw. was hat sich zwischen VS 6.0 und .NET in diesem Bereich verändert?!?? 😕

    Entweder bin wirklich nur ich so doof oder dieses Problem hat sonst noch niemand gehabt, bzw. ist es noch keinem aufgefallen.....!

    HILFE! 😃

    Gruss
    S.

    P.S.: Lasst mich doch nicht so deprimiert ins WE gehen 🙄



  • *push* 😞



  • Ein letztes Mal... Leute, ist die Frage so dämlich oder so unlösbar? 😕
    Wenn sie so dämlich ist, dann helft uns doch bitte mal. 🙄



  • Stefan H schrieb:

    Füge ich bei meinem RadioBtn unter .NET eine Variable hinzu, so wird mir als CONTROL CButton und als VALUE bool angeboten....aber irgendwie bringen mich beide Varianten nicht weiter.

    Bei Wert wird mir BOOL angeboten. Das ändere ich einfach in int, und fertig.



  • Hmm, cool das klappt. 👍
    Nur leider ist der zweite Button nicht anklickbar - also, man kann draufklicken, aber er kriegt die Marke nicht.

    Ich habe jetzt 2 Radiobuttons, sie liegen in der Taborder direkt hintereinander, der erste hat das Gruppenflag und die Membervariable (wie oben beschrieben).

    Was fehlt noch? 😕



  • Auto-Eigenschaft auf True?



  • Ist sie ja automatisch. Also: Ja.



  • 7.0 oder 7.1?



  • 7.1



  • Damit ich nicht die zwei Seiten von vorne durchlesen muss, wollt ihr einfach nur 2 radio buttons haben? Einen als Group == TRUE, der eine nicht, so dass der eine nicht markiert ist, wenn der andere markiert ist? Und das alles in VC 7.1?

    Habe soetwas schon gemacht. Müsste ich mal nachschauen, wo das gelandet ist. Oder ich versuche es neu. Vielleicht habe ich ja am Wochenende dafür Zeit.
    Aber gebt mal kurz ne Bestätigung, ob ich richtig liege.

    MfG,
    Paul.



  • Paul_C. schrieb:

    Damit ich nicht die zwei Seiten von vorne durchlesen muss, wollt ihr einfach nur 2 radio buttons haben? Einen als Group == TRUE, der eine nicht, so dass der eine nicht markiert ist, wenn der andere markiert ist? Und das alles in VC 7.1?

    Soweit richtig. 🙂
    Und an diese beiden Radiobuttons soll eine Int-Variable gebunden sein, die jenachdem welcher Button angeklickt ist, nach einem UpdateData(FALSE); die entsprechende Zahl enthält........... 😮 🙄

    Okay, manchmal muss man drüber reden. *imbodenversink*
    Ich hab das UpdateData falschrum gemacht, kein Wunder dass das Anklicken nix gebracht hat. 🙄

    Danke, es geht jetzt.
    Es war echt nur das Eintippen, was MFK gesagt hat. Darauf wäre ich nie gekommen, dass der Dialog nicht alle möglichen Möglichkeiten anbietet. 👎


Anmelden zum Antworten