probleme button zu verbergen



  • hallo,

    habe folgendes problem. wenn ich mein programm starte, öffnet sich ein fenster, welches durch einen dialog ausgefüllt wird. ich habe ein paar edit_controls und button da drin. zu beginn setze ich den inhalt der controls auf null:

    CPicToLightView::CPicToLightView()
    	: CFormView(CPicToLightView::IDD)
    {
    	//{{AFX_DATA_INIT(CPicToLightView)
    	m_schublade = 0;
    	m_fach = 0;
    	m_stkzahl= 0;
    	//}}AFX_DATA_INIT
    }
    

    nun möchte ich zu beginn mehrere button nicht anklickbar machen. das wollte ich dann machen, in dem ich oben noch folgende Zeile hinzufüge.

    btnHwRelease.EnableWindow(false);
    

    Das funktioniert jedoch leider nicht. das programm bricht sofort mit einer fehlermeldung ab.

    komme da einfach nicht weiter. wäre klasse, wenn mir da jemand weiterhelfen könnte.

    vielen dank.

    gruß
    sven



  • Jo...

    Im Konstruktor ist der Button noch nicht erstellt!

    CPicToLightView::OnInitDialog(void)
    {
        CDialog::OnInitDialog();
        // ...
        btnHwRelease.EnableWindow(false);
    }
    


  • wenn ich folgendes einfüge:

    BOOL CPicToLightView::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    	btnHwRelease.EnableWindow(false);
    
    	return TRUE;  // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
    }
    

    erhalte ich folgende fehlermeldung:

    'CDialog::OnInitDialog::CDialog::OnInitDialog': Unzulässiger Aufruf einer nicht statischen Memberfunktion

    😕



  • onInitDialog(....wird auch gar nicht aufgerufen 😕



  • Sry... hab mich vertan... hatte dir die Lösung für einen Dialog gegeben und nicht für eine FormView... OnInitialUpdate...



  • hat jemand eine andere idee?...ich komme da gar nicht mehr weiter 😕 😕 😕 😕

    gruß
    sven



  • OnInit...(...) ist die richtige Funktion für so etwas.
    Manchmal fehlt irgendwo die Aktualisierung von Fenstern/Controls.
    Probiere in solchen Fällen UpdateData(FALSE) bzw. Invalidate():

    UpdateData( TRUE ) transferiert Daten aus den Steuerelementen in die Variablen.
    UpdateData( FALSE ) transferiert Daten aus den Variablen in die Steuerelemente.
    Invalidate() erzwingt sofortiges Neuzeichnen.

    Bei CEdit gibt es auch die Funktion SetReadOnly():
    m_ctlEdit1.SetReadOnly();

    Falls Du eine Datenbankanwendung in MFC bastelst, ist das lesenswert:
    http://www.se.fh-heilbronn.de/usefulstuff/VCPLUS6/kap13.htm und Folgekapitel



  • hallo,

    ich habe das nun mal folgender maßen probiert, das funktioniert allerdings auch nicht.

    void CPicToLightView::OnInitialUpdate() 
    {
        // Beim Start des Programms wird eine Messagebox angezeigt
        CFormView::OnInitialUpdate();
    	MessageBox("Text Text Text");
    
    	Init.EnableWindow(false);
    	btnHwRelease.EnableWindow(false);
    	btnHwInit.EnableWindow(false);
    }
    

    Die Messagebox wird angezeigt, wenn man die dann mit OK quittiert, brichts ds Programm wieder an der Stelle Init.EnableWindow(false); ab.

    Ich denke die Button existieren zu der zeit noch nicht, aber ich weiß absolut nicht, wo das sonst hingehöen sollte.

    gruß
    sven



  • KOmmando zurück, jetzt funktioniert es. ich habe noch folgendes vergessen für jeden Button einzutragen:

    DDX_Control(pDX, IDC_BTNHWRELEASE, btnHwRelease);
    

    Jetzt funktioniert es! 🙂


Anmelden zum Antworten