Bereichsprüfung einer Variable zur Laufzeit ändern

gehrti

Mitglied
Hallo!

Ist es irgendwie möglich die Bereichsprüfung die man ua. mit dem Klassenassisten (Member-Variable) oder unter DoDataExchange(CDataExchange* pDX) für eine Variable (float, int, usw.) einstellen kann, zur Laufzeit zu ändern?

MfG. Thomas
 
Keine Ahnung. Ich bin dem Problem ausgewichen, indem ich die Bereichsprüfung in einer eigenen Funktion vorgenommen habe...

Ein Beispiel:
** in einem Dialog können über die Editfelder Strings eingelesen werden, die anschließend beim Klicken auf OK auf richtige Eingabe überprüft werden sollen (man kann es natürlich auch so machen, dass sie überprüft werden sollen, wenn das Editfeld den Eingabefokus verliert):

Code:
bool stringzahlen (CString straps)
{
int kommas=0;
for(int i=0; i<straps.GetLength(); i++)
{
	 if(straps.GetAt(i)==44 || straps.GetAt(i)==46) //KOMMA UND PUNKT EINGABE EINMAL() ERLAUBT
				 kommas++;
if(!((straps.GetAt(i)>=48 && straps.GetAt(i)<=57) || straps.GetAt(i)==44 || straps.GetAt(i)==46)) //SOLANGE DER STRING AUS ZAHLEN, KOMMAS UND PUNKTEN BESTEHT IST ALLES IN ORDNUNG
 
return FALSE;
}
if(kommas<=1) 
	 return TRUE;
else return FALSE;
}
 
 
void Dateneingabe::OnOK()
{
int i;
bool okornotok=TRUE;
CString eingabe;
GetDlgItemText(IDC_EDITFELD,eingabe);
if( !stringzahlen(eingabe) )
{
		 MessageBox("GIB WAS ORDENTLICHES EIN, DU DEPP","Achtung!",MB_OK );
		 okornotok=FALSE;
}
 
if(okornotok)
		 CDialog::OnOK();
}
 
Das sollte funktionieren, wenn Du im DoDataExchange im entsprechenden Funktionsaufruf DDV_MinMaxInt(...) für Dein Anzeigeelement die konstanten minVal und maxVal Parameter (Parameter 3 und 4) durch Variablen ersetzt. Ich gehe jetzt davon aus, daß die Zeile mit dem DDV_MinMaxInt(...) vom Wizard hinzugefügt wurde.
 
@ jokey2: vielen Dank, hat funktioniert.
Ich hatte das zwar auch schon versucht, aber ich hatte da Variablen genommen, die erst später im Dialog von einem anderen Dialog her übergeben wurden .. hab da irgendwie gepennt ;-)

@ Rearhh: jupp, habe ich auch bei manchen Sachen so gemacht, aber bei dieser spezielen Sache brauchte ich die vordefinierte Bereichsprüfung. Danke trotzdem :)

MfG. Thomas
 
Zurück