Membervariablen als Array m_XXX[...]
-
Kann man Membervariablen in MSVC++6 mittels Assistent als Array m_XXX[...] anlegen? Z.B., wenn man Folgendes erreichen möchte:
void CMembervariablen_mit_ArrayDlg::OnButton1() { for(int i=1; i<=4; ++i) m_B[i].SetWindowText(""); m_B[1].SetWindowText("geklickt"); } void CMembervariablen_mit_ArrayDlg::OnButton2() { for(int i=1; i<=4; ++i) m_B[i].SetWindowText(""); m_B[2].SetWindowText("geklickt"); } void CMembervariablen_mit_ArrayDlg::OnButton3() { for(int i=1; i<=4; ++i) m_B[i].SetWindowText(""); m_B[3].SetWindowText("geklickt"); } void CMembervariablen_mit_ArrayDlg::OnButton4() { for(int i=1; i<=4; ++i) m_B[i].SetWindowText(""); m_B[4].SetWindowText("geklickt"); }Bisher muss man "händisch" die vom Assistenten angelegten Membervariablen z.B. m_Button1 gegen m_Button[1] tauschen und die Definition im Header der Klasse entsprechend anpassen, also z.B. alle m_Button1, m_Button2, ... löschen und durch m_Button[5] (z.B.: 5 = 4 Buttons + 1 ) ersetzen. Das ist aber lästig und bei komplexen Systemen auch fehlerträchtig.
-
Afaik geht das nicht (ich lasse mich aber gerne eines Besseren beleeren).
btw, warum verschwendest du denn Platz? Wenn du nur 4 Buttons hast, brauchst du auch nur ein 4-elementiges Array zu reservieren.
-
Man zählt aus logischen Gründen manchmal bevorzugt von 1 bis n anstelle 0 bis n-1; daher lieber n+1 Platz anlegen, bevor es klemmt. Soviel Platz muss sein!
-
Und was passiert dann bei
m_B[5].SetWindowText("geklickt");?
-
connan schrieb:
Und was passiert dann bei
m_B[5].SetWindowText("geklickt");?
Bei ihm wäre das wohl eher so:
was passiert beim_B[0].SetWindowText("geklickt");^^
Und zudem wir sind in der Programmierung und Informatik, da ist es eher logisch, dass man von 0 bis n-1 zählt, alles andere ist doch nur normal denkendes Volk

Grüssli
-
Wie so oft hier: Thema verfehlt!

Geht das jetzt mit dem Assi oder nicht, wenn nein, warum eigentlich nicht?
-
CStoll hat es ja oben geschrieben dass es nicht geht. Ich weiss auch nichts davon, dass es geht. Und wieso nicht? Frag Microsoft!
Grüssli
-
Man muss die Arrays jeweils außerhalb des Assistentenbereichs händisch selbst anlegen und pflegen (geht leicht), weil sich sonst der Parser verschluckt.
Beispiel://im Header: // Dialogfelddaten //{{AFX_DATA(CSAPI001Dlg) enum { IDD = IDD_SAPI001_DIALOG }; CEdit m_ctlEdit1; FooButton m_ctlButtonKBDelay3; FooButton m_ctlButtonKBDelay2; FooButton m_ctlButtonKBDelay1; FooButton m_ctlButtonKBDelay0; FooButton m_ctlButtonKBFast; FooButton m_ctlButtonKBMiddle; FooButton m_ctlButtonKBSlow; CSliderCtrl m_ctlSpeed; CSliderCtrl m_ctlVolume; CButton m_ctlButton_Stimme; CButton m_ctlButton_Clear; CButton m_ctlButton_Speak; CString m_Edit1; CString m_Edit_Statuszeile; int m_Speed; int m_Volume; //}}AFX_DATA FooButton m_ctlButtonKat[7]; //außerhalb AFX_DATA FooButton m_ctlButton_Nr[11]; //.... //Implementierung: void CSAPI001Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSAPI001Dlg) DDX_Control(pDX, IDC_BUTTONKBDELAY3, m_ctlButtonKBDelay3); DDX_Control(pDX, IDC_BUTTONKBDELAY2, m_ctlButtonKBDelay2); DDX_Control(pDX, IDC_BUTTONKBDELAY1, m_ctlButtonKBDelay1); DDX_Control(pDX, IDC_BUTTONKBDELAY0, m_ctlButtonKBDelay0); DDX_Control(pDX, IDC_EDIT1, m_ctlEdit1); DDX_Control(pDX, IDC_BUTTONKBFAST, m_ctlButtonKBFast); DDX_Control(pDX, IDC_BUTTONKBMIDDLE, m_ctlButtonKBMiddle); DDX_Control(pDX, IDC_BUTTONKBSLOW, m_ctlButtonKBSlow); DDX_Control(pDX, IDC_SLIDER_SPEED, m_ctlSpeed); DDX_Control(pDX, IDC_SLIDER_VOLUME, m_ctlVolume); DDX_Control(pDX, IDC_BUTTON_VOICE, m_ctlButton_Stimme); DDX_Control(pDX, IDC_BUTTON_CLEAR, m_ctlButton_Clear); DDX_Control(pDX, IDC_BUTTON_SPEAK, m_ctlButton_Speak); DDX_Text(pDX, IDC_EDIT1, m_Edit1); DDX_Text(pDX, IDC_EDIT_STATUSZEILE, m_Edit_Statuszeile); DDX_Slider(pDX, IDC_SLIDER_SPEED, m_Speed); DDX_Slider(pDX, IDC_SLIDER_VOLUME, m_Volume); //}}AFX_DATA_MAP //außerhalb AFX_DATA_MAP DDX_Control(pDX, IDC_BUTTON_KAT6, m_ctlButtonKat[6]); DDX_Control(pDX, IDC_BUTTON_KAT5, m_ctlButtonKat[5]); DDX_Control(pDX, IDC_BUTTON_KAT4, m_ctlButtonKat[4]); DDX_Control(pDX, IDC_BUTTON_KAT3, m_ctlButtonKat[3]); DDX_Control(pDX, IDC_BUTTON_KAT2, m_ctlButtonKat[2]); DDX_Control(pDX, IDC_BUTTON_KAT1, m_ctlButtonKat[1]); DDX_Control(pDX, IDC_BUTTON_NR10, m_ctlButton_Nr[10]); DDX_Control(pDX, IDC_BUTTON_NR9, m_ctlButton_Nr[9]); DDX_Control(pDX, IDC_BUTTON_NR8, m_ctlButton_Nr[8]); DDX_Control(pDX, IDC_BUTTON_NR7, m_ctlButton_Nr[7]); DDX_Control(pDX, IDC_BUTTON_NR6, m_ctlButton_Nr[6]); DDX_Control(pDX, IDC_BUTTON_NR5, m_ctlButton_Nr[5]); DDX_Control(pDX, IDC_BUTTON_NR4, m_ctlButton_Nr[4]); DDX_Control(pDX, IDC_BUTTON_NR3, m_ctlButton_Nr[3]); DDX_Control(pDX, IDC_BUTTON_NR2, m_ctlButton_Nr[2]); DDX_Control(pDX, IDC_BUTTON_NR1, m_ctlButton_Nr[1]); }Es ist erstaunlich, dass dieses praktische Feature im Assistenten fehlt.