Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Scheiss MessageBox

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
19.07.2004, 14:10 Uhr
~Schwabi
Gast


Jo, also wie das Thema schon sagt hab ich die Schnauze so ziemlich voll.
Ich habe in meinem Programm Editfelder in denen Zahlen eingegeben werden sollen.
(als double festgelegt)
Es ist ja schoen und gut das er mir dann bei der Eingabe eines Buchsteben etc. sagt das ich eine Zahl eingeben soll.
Nur ich muss das selber abfangen, weil ich nebenbei noch einen Timer zulaufen habe.
Also kann ich das irgendwie abstellen ???
Oder darf ich das ganze als CString nehmen und es in eine Zahl umwandeln, was ziemlich viel ist und wo ich kein Bock drauf hab.

Gruesse Schwabi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.07.2004, 14:40 Uhr
Tommix



Nicht die Nerven verlieren
Sieh mal hier.

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.07.2004, 15:09 Uhr
~Schwabi
Gast


Ich doch nich, aber danke erst ma. Haette ja auch erst ma suchen koennen.
Nur leider hilft mir das nich wirklich weiter.
Ich beschreib hier kurz mal mein Programm.:
In einem Timer wird staendig ueberprueft ob ein Editfeld aktiviert wird oder nicht.
(wenn ein haekchen in ner Checkbox, dann nicht aktiv, sonst aktiv)
Nun kommt der eigentliche Haken.
In den Editfeldern stehen Default Werte drinne, schliesslich werden hier dann eigene Werte eingegeben, die nur in einem bestimmten Bereich liegen duerfen.
Sobald wie dieser verlassen wird soll eine Fehlermedlung kommen, die kommt ja auch automatisch, nur stuerzt er mir nach dem druecken von OK wieder ab.
Warum, ich weiss es leider nich, kanns mir nich erklaeren.

Nun hab ich schon folgendes probiert:


Code:
void CTempcon_ParametrierungView::OnChangeEdit47()
{
    KillTimer(0);
    UpdateData(TRUE);
    SetTimer(0, 20, NULL);
}





Der Timer sieht uebrigens so aus:



Code:
void CTempcon_ParametrierungView::OnTimer(UINT nIDEvent)
{

    CWnd * pWnd_check = NULL;
    CWnd * pWnd_edit  = NULL;


    for(int i=0; i<24; i++)
    {
        pWnd_check = (CButton*)GetDlgItem(check[i]);
        pWnd_edit  = (CButton*)GetDlgItem(edit[i]);

        if( (pWnd_check->GetSafeHwnd()) && (pWnd_edit->GetSafeHwnd()) )
        {
            if ( ((CButton*)GetDlgItem(check[i]))->GetCheck() == 1)
            {
                ((CButton*)GetDlgItem(edit[i]))->EnableWindow(FALSE);
                UpdateData(TRUE);
            }

            else
            {
                ((CButton*)GetDlgItem(edit[i]))->EnableWindow(TRUE);
            }
        }
    }

    CFormView::OnTimer(nIDEvent);
}




Wenn ich nichts eingebe, bzw. den Defaultwert rausloesche kommt auch erst die Nachricht "gib eine Zahl ein" und dann nach OK der Absturz.

Ich hoffe ich hab das so erklaert das es einer versteht um mir zu helfen.

Grusse Schwabi
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.07.2004, 15:30 Uhr
~Schwabi
Gast


Ah, so langsam komm ich dahinter.
Durch das UpdateData beim true Zweig im Timer stuerzt er mir ab, weil staendig eins deaktiviert ist.
Aber so richtig hab ich dann da auch noch keine Loesung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.07.2004, 15:31 Uhr
~Schwabi
Gast


Ah bin ich daemlich, einfach das Update weg lassen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.07.2004, 15:55 Uhr
Tommix



Dass sieht ja schlimm aus, Du castest soviel, dass Du an jeder Casting-Show teilnehmen könntest - könnte glatt von Windalf stammen *SCNR*
Also, 1.
nachdem Du nun schon pWnd_check und _edit da hast, wieso verwendest Du sie nicht, sondern statt dessen diese (CButton*)GetDlgItem(check[i]) - Ungetüme.
2. Der Zeiger auf die Checkbox sollte vom Typ CButton* sein, der andere vom Typ CEdit* (Du castest immer nach CButton*, das ist bei einem Editfeld nicht sehr sinnvoll. Genau aus dem Grund soll man auch nicht casten, wenn es sich vermeiden läßt).
3. Für sowas nimmt man normalerweise keinen Timer, das ist MSDOS-mäßig gedacht. Füge für die Checkboxen eine Behandlungsroutine für BN_CLICKED hinzu (das kann für alle Checkboxen ein und dieselbe Funktion sein). Wenn Du dann, auch wenn's Arbeit macht, den Checkboxen Membervariablen spendierst, kannst Du das Ganze halbwegs sauber lösen:

C++:
void CTempcon_ParametrierungView::OnCheck()
{
    UpdateData();

    GetDlgItem(IDC_EDIT1)->EnableWindow(m_check1) ;
    GetDlgItem(IDC_EDIT2)->EnableWindow(m_check2) ;
    // usw.
}


Ich persönlich würde auch für die Edits Membervariablen hinzufügen. Das ist dann nämlich typsicher.

Gruss Tommix

Dieser Post wurde am 19.07.2004 um 15:58 Uhr von Tommix editiert.
 
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: