Übernehmen Button



  • Hallo.

    Habe einen Dialog der mehrere Controlls hat und das auf mehreren Tabs. Nun habe ich einen Übernehmen Button platziert. Dieser Button soll nun nur aktiv sein wenn sich im Dialog ein Wert geändert hat. Muss ich nun alle Werte prüfen ob sie sich geändert haben?



  • ne dein Dialog benötigt doch nur eine Funktion die jedes Control (jede Tabseite) bei änderungen ausführt und diese wiederum kann eine Boolsche Membervariable auf TRUE und den Übernehmen-Button Enable machen.



  • Das heißt ich muss die Funktion dann überall aufrufen. Gibts da nicht so was wie OnDialogChange() zum Beispiel. Also eine Funktion die jedesmal aufgerufen wird wenn sich was im Dialog ändert.


  • Mod

    Nein!
    Jedes Control hat vor allen eine andere Art von "Änderung".
    Edit Control senden EN_CHANGE, Buttons und Checkboxen ein BN_CLICK, ListControls ändern sich nur wenn Du es tust.

    Was eine Änderung ist, bestimmst immer noch Du!
    Merke es Dir und schalte den Button ein oder aus...

    Geht auch aber finde ich nicht so gut:
    Du kannst auch die alten Variablen vor editieren speichern und vergleichen mit dem aktuellen Daten des Nutzers...



  • Das heißt ich muss für jedes Controll einen Ereignishandler hinzufügen. Und das für jede Checkbox, Radiobutton usw.

    Geht auch aber finde ich nicht so gut:
    Du kannst auch die alten Variablen vor editieren speichern und vergleichen mit
    dem aktuellen Daten des Nutzers...

    Hat aber einen Vorteil. Ich weiß genau wie sich der Zustand geändert hat. Wenn der alte Zustand durch mehrmalige Änderung wiederhergestellt wurde hat, weiß ich dass sich trotz Aktion nichts geändert hat.



  • Hm komisch irgendwie mache ich noch was falsch:

    Habe nun mal für eine Checkbox getetestet:

    void CGeneralDlg::OnBnClickedCheckInfos()
    {
    	COptionsDlg *parent = (COptionsDlg*)GetParent();
    	parent->EnableCommitButton();
    }
    
    void COptionsDlg::EnableCommitButton(BOOL enable =TRUE)
    {
    	m_commitButton.EnableWindow(enable);
    	UpdateData(FALSE);
    }
    

    Der Button bleibt disabled. Wieso?



  • Es geht nicht weil ich die Klasse DynTabCtrl genommen habe von phlox81. Und deshalb ist mein Parent nicht mein übergeordneter Dialog sondern die Klasse DynTabCtrl. So wie komme ich nun an meinen übergeordneten Dialog?



  • Wenn dein Dialog das Hauptfenster ist und du m_pMainWnd in der InitInstance gesetzt hast, kannst du das mit ::AfxGetMainWnd() heraus finden. An sonnsten sollte es auch gehen wenn du 2 mal GetParent aufrufst, also einmal unm das TabCtrl zu erhalten und von dem dann wieder aud den Dialog zu kommen. Oder Du schleifst den Zeiger auf den Dialog mit durch, sollte sich auch irgendwie bereitstellen lassen



  • Ja habe 2 mal GetParent aufgerufen. Dann hats geklappt.


Anmelden zum Antworten