Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Radiobuttons Gruppenfeld

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.08.2005, 19:01 Uhr
~Icho Tolot
Gast


Hallo Leute
Ich habe 6 Radiobuttons in einem Gruppefeld platziert.
Wie bekomme ich den Index für den Radiobutton der angeklickt wurde,
ohne für jeden Radiobutton eine Onklicket Funktion zu erstellen?

Danke im Voraus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.08.2005, 21:00 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


In der Messagemap folgendes einfügen

Die Radiobuttons müssen unmittelbar hintereinander erstellt werden damit Sie in der Ressourcendatei auch durchgehende Nummern erhalten. Wenn dem nicht der Fall ist alte Radiobuttons löschen und neu erstellen. Prinzipiell könnte man auch direkt in der Ressoucendatei rumpfuschen aber wer da nicht weiss was er tut Finger weg sonst ist das ganze Projekt schnell dahin...

C++:
BEGIN_MESSAGE_MAP(ViewerDlg, CDialog)
    //{{AFX_MSG_MAP(ViewerDlg)
    .
    .
    .
    //}}AFX_MSG_MAP

    ON_COMMAND_RANGE(IDC_RADIOBUTTON_FIRST, IDC_RADIOBUTTON_LAST,Radiobuttonfunction)

END_MESSAGE_MAP()




memberfunktion im header deklarieren

C++:
void Radiobuttonfunction(UINT nID);



memberfunktion definieren

C++:
void CMyClass::Radiobuttonfunction(UINT nID){


    if(nID==IDC_RADIOBUTTON_FIRST)...;
    .
    .
    .
    
}


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 22.08.2005 um 21:01 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.08.2005, 22:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


wichtig dabei ist jedoch das alle radiobutton-ids aufsteigend sind (im notfall in der resource.h manuell ändern)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.08.2005, 14:34 Uhr
~Icho Tolot
Gast


Ich habe es in beiden Messagemaps probiert, aber es gibt zwei errors.

C++:
class CAboutDlg : public CDialog
{
public:
    CAboutDlg();

// Dialogfelddaten
    //{{AFX_DATA(CAboutDlg)
    enum { IDD = IDD_ABOUTBOX };
    //}}AFX_DATA

    // Vom Klassenassistenten generierte Überladungen virtueller Funktionen
    //{{AFX_VIRTUAL(CAboutDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
    //}}AFX_VIRTUAL

// Implementierung
protected:
    //{{AFX_MSG(CAboutDlg)
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
    //{{AFX_DATA_INIT(CAboutDlg)
    //}}AFX_DATA_INIT
}


void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAboutDlg)
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    //{{AFX_MSG_MAP(CAboutDlg)
        // Keine Nachrichten-Handler
    //}}AFX_MSG_MAP
//    ON_COMMAND_RANGE(IDC_RFRA1_1, IDC_RFRA1_2,IDC_RFRA1_3,IDC_RFRA1_4,IDC_RFRA1_5,IDC_RFRA1_6,Radiobuttonfunction1)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFragebogenClientDlg Dialogfeld

CFragebogenClientDlg::CFragebogenClientDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CFragebogenClientDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CFragebogenClientDlg)
    m_strFrage1 = _T("");
    m_strPlusMinus = _T("");
    //}}AFX_DATA_INIT
    // Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CFragebogenClientDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CFragebogenClientDlg)
    DDX_Control(pDX, IDC_EDIT_FRAGE1, m_ctlFrage1);
    DDX_Control(pDX, IDC_STATIC_PLUSMINUS, m_ctlPlusminus);
    DDX_Text(pDX, IDC_EDIT_FRAGE1, m_strFrage1);
    DDX_Text(pDX, IDC_STATIC_PLUSMINUS, m_strPlusMinus);
    //}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CFragebogenClientDlg, CDialog)
    //{{AFX_MSG_MAP(CFragebogenClientDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_B_SPEICHERN, OnBSpeichern)
    //}}AFX_MSG_MAP
//    ON_COMMAND_RANGE(IDC_RFRA1_1, IDC_RFRA1_2,IDC_RFRA1_3,IDC_RFRA1_4,IDC_RFRA1_5,IDC_RFRA1_6,Radiobuttonfunction1)
END_MESSAGE_MAP()


error C2440: 'type cast' : 'const int' kann nicht in 'void (__thiscall CCmdTarget::*)(unsigned int)' konvertiert
error '&' auf Konstante
BEGIN_MESSAGE_MAP(ViewerDlg, CDialog)
Ist bei mir nicht vorhanden.

Ich brauche 10 Buttongruppen a 6 Stück.
Müssen die dann alle in "ON_COMMAND_RANGE" rein, oder
kann man auch ON_COMMAND_RANGE1 ON_COMMAND_RANGE2 ... machen?

Gruß Tolotos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.08.2005, 19:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du brauchst pro Anfang und Ende ein ON_COMMAND_RANGE

also z.b so:


C++:
ON_COMMAND_RANGE(IDC_RADIO1_1, IDC_RADIO1_10, Group1);
ON_COMMAND_RANGE(IDC_RADIO2_1, IDC_RADIO2_10, Group2);
// usw


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.08.2005, 20:23 Uhr
~Icho Tolot
Gast


OK
Danke es funktioniert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.08.2005, 19:40 Uhr
~Icho Tolot
Gast


Hallo, habe noch ein Problem.

Mit "m_radioFrage1.SetCheck(1);" setze ich den ersten Button der Gruppe.

Wenn der Anwender einen Butteon der Gruppe setzt, z.B. Nr, 4
und danach speichert, dann soll durch "m_radioFrage1.SetCheck(1);"
der erste Button gesetzt werden, was auch klappt.
Nur der Button Nr. 4 ist weiterhin gesetzt.
Nach dem speichern soll alles wieder neutral aussehen.
Wie kann ich das erreichen?

Mit einer int Variablen klappt das ganze einwandfrei, nur kann ich dann
ON_COMMAND_RANGE(IDC_RFRA1_1,IDC_RFRA1_6,Radiobuttonfunction1)
nicht verwenden. Dann klappt garnichts.

Gruß Tolotos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.08.2005, 19:47 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja entweder int-var oder Ctrl-Var, beides geht natürlich nicht. Ansonsten kriegst du doch bei der Commandrange ne ID vom steuerelement geliefert, da drin dann:


C++:
CheckRadioButton(IDC_RFRAx_1, IDC_RFRAx_6, nID);



aufrufen, dann wird die richtige "markiert"

Ansonsten musst du nach dem Speichern eben auch obiges aufrufen, nur statt nID eben IDC_RFRAx_1. Dann sollte er die restlichen "in der Gruppe" deaktivieren und nur das erste aktivieren.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.08.2005, 20:09 Uhr
~Icho Tolot
Gast


Danke FloSoft.
Das war genau das, was ich suchte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: