Eingabefelder beschränken?

B

ByeBye 31659

Hallo,

kann mir jemand sagen, wie ich ein Einagebfeld auf 25 zeichen beschränken kann?
So dass wenn mehr Zeichen eingegeben werden einfach die letzten nicht mehr akzeptiert werden?

Und dann hab ich noch die Frage, ob ich ein Eingabefeld so formatieren kann, dass nur Zahlen erlaubt sind, aber auch negative....

Für Hilfe wäre ich sehr dankbar.
 

Kachelator

Peter Jerz
Hier kommt ein Schnipsel für dich!

PreTranslateMessage() wird vor der Verarbeitung jeder Windowsnachricht aufgerufen (Mit Classwizard in den Dialog einsetzen!). Damit kannst du alles abfangen, was du willst. Wenn du nichts unternehmen willst, gib ein TRUE zurück - dadurch wird das Standardverhalten (z.B. Einfügen eines Zeichens) ausgelöst.
Wenn du zum Beispiel eine Längenprüfung einbauen willst, könntest du das bei WM_CHAR machen und bei zu lngem String das Zeichen nicht einfügen und ein FALSE zurückgeben (sonst wird er doch noch eingefügt). Nicht vergessen, dass gewisse Tasten (Backspace) auch zur Verkürzung führen können. Ausserdem berücksichtigen, was Copy&Paste anrichten könnten!

Das Beispiel fängt das 'x' ab und ersetzt es durch ein 'u'. Ich habe den Schnipsel in dieser Form nicht kompiliert; es können sich also Fehler eingeschlichen haben.
Code:
BOOL CEinDlg::PreTranslateMessage(MSG* pMsg) 
{
  if ( pMsg->hwnd == m_ctlEdit.GetSafeHwnd() && pMsg->message == WM_CHAR  )
  {
    char c = pMsg->wParam;
    if ( c == 'x' )
    {
      // es ist ein x, also ein u draus machen
      c = 'u';
      CString temp;
      m_ctlEdit.GetWindowText( temp );
      temp += c;
      m_ctlEdit.SetWindowText( temp );
      return FALSE;
    }
    else    
    {
      // es ist was anderes, also Defaultverhalten
      return TRUE;
    }
  }
  else
  {
    // ist irgendwas anderes -  ignorieren
    return CDialog::PreTranslateMessage(pMsg);
  }
}
Ich hoffe, das hilft dir weiter!
 
Zuletzt bearbeitet:
B

ByeBye 31659

Irgendwie steig ich da nicht so richtig durch....

Kansnt du mir das vielleicht etwas genauer erklären?
 

Kachelator

Peter Jerz
Vielleicht, wenn du mir erklärst, was du nicht verstehst? Ansonsten erschien mir die Information recht vollständig zu sein.
 
B

ByeBye 31659

Hi,

ich hab das nun so gemacht, dass ich für die Eingabefelder Membervariablen mithilfe des Klassenassistenten erstellt habe und diese Variablen dann so eingestellt habe, dass halt nur 25 Zeichen bzw eine Zahl von 1900 bis 2100 eingegeben werden dürfen.

Kann mir jemand sagen, wie ich es nun schaffe ein EIngabefeld zu leeren also so das es blank ist, auch wenn es als Integerfeld eingestellt ist?

Weil das was ich sonst benutze sowas wie: m_strTitel = " ";

Geht in diesem Falle nicht....
 

Kachelator

Peter Jerz
Oh, ich hatte angenommen, dass du Edit-Controls als Member verwendest anstelle von CStrings.

Die CEdit kannst du dir statt CStrings vom Classwizard einsetzen lassen. Das solltest du vielleicht tun, da du dadurch wesentlich mehr Kontrolle über das Verhalten bekommst. Die Verwendung ist auch nicht allzu knifflig. Mein Codeschnipsel von oben bezog sich übrigens auf die Verwendung eines CEdit.