Hallo,
ich finde mal wieder die Bäume nicht im Wald ...
Ich möchte mir eine Textbox bauen, die nur Integerwerte annimmt, und die über einen Wertebereich verfügt.
Hierzu habe ich eine neue Steuerelementebibliothek in VS2005 angewählt. Aber danach verliert sich der Erfolg in meinem Unwissen ??
Ich gebe der Textbox einen Errorprovider um eine Fehleingabe direkt abzufangen. Ich möchte bei jedem Textbox.leave Ereignis die Prüfung starten.
Wahrscheinlich mache ich hier ein paar haarsträubende Fehler aber ich habe mit der Suche nichts wirklich hilfreiches gefunden 😦
ich bin sowohl für direkte Hinweise, als auch für einen Link, der auf eine gutverständliche Quelle verweist dankbar.
so hier der Code :
{
public partial class IntBox1 : System.Windows.Forms.TextBox
{
private System.Windows.Forms.ErrorProvider fehler = new System.Windows.Forms.ErrorProvider();
private System.ComponentModel.CancelEventArgs exit = new System.ComponentModel.CancelEventArgs();
int? minWert = null;
int? maxWert = null;
int testwert;
string ausgabe;
[Browsable(true)]
[Category("Grenzen")]
[Description("Legt den Minimalwert für die Integerbox fest")]
public int? MinWert
{
set
{
this.minWert = value;
}
get
{
return this.minWert;
}
}
[Browsable(true)]
[Category("Grenzen")]
[Description("Legt den Maximalwert für die Integerbox fest")]
public int? MaxWert
{
set
{
this.maxWert = value;
}
get
{
return this.maxWert;
}
}
private void Pruefung(object sender, EventHandler e)
{
try
{
testwert = Convert.ToInt32(this.Text);
}
catch
{
fehler.SetError(this, "Dies ist kein Integerwert");
exit.Cancel = true;
return;
}
if (testwert < minWert)
{
ausgabe="Bitte geben Sie einen Wert größer als " +Convert.ToString(MinWert)+ " ein!";
fehler.SetError(this, ausgabe);
exit.Cancel = true;
return;
}
if (testwert > maxWert)
{
ausgabe = "Bitte geben Sie einen Wert größer als " + Convert.ToString(maxWert) + " ein!";
fehler.SetError(this, ausgabe);
exit.Cancel = true;
return;
}
fehler.SetError(this, string.Empty);
exit.Cancel = false;
return;
}
public IntBox1()
{
InitializeComponent();
this.TextChanged += new EventHandler(
}
private void IntBox1_Load(object sender, EventArgs e)
{
}
}
}
Hallo!
Unter net2.0 kannst du eine MaskedTextBox verwenden. Die könnte dein Problem lösen.
der Marcel
EDIT: Sorry, mein Vorschlag passt ncht. Du möchtest ja auch einen bestimmten Wertebereich eingrenzen.
:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]
Hallo northdrive,
warum beim Leave? Verwende besser Validating. Entsprechend muss du dann OnValidating überschreiben und dort base.OnValidating und Pruefung aufrufen.
herbivore
PS: Vielleicht auch interessant In einer TextBox nur bestimmte Zeichen/Eingaben zulassen
hallo herbivore,
mein Problem ist : ich weiß nicht genau wie ich das tun soll, kannst du mir eine (online) Literaturstelle empfehlen wo das für "peep" beschrieben ist ?
danke
northdrive
Hallo northdrive,
verstehe nicht genau dein Problem. Ich würde mal meinen, alles was du brauchst steht in der MSDN. Und die sollte besser auf deinem Rechner sein, so oft wie man die braucht.
==> Control.Validating-Ereignis
herbivore
PS: Allgemeines über Events und wie man damit umgeht, solltest du am besten einem guten C#-Buch entnehmen.
hallo herbivore,
auch wenn ich versuche, das von dir erstellte Ereignis mit der Texbox zu implementieren, bekomme ich Fehlermeldungen :
Das System beschwert sich, dass es keine Definitionen für load, AutoscaleDimensions...
erhält.
Ich habe hier ein paar eigentlich nicht schlechte Bücher stehen, aber die Erstellung von Steuerelementen ist in diesen wirklich nicht wundervoll dargestellt...
Kannst du mir bitte erklären was ich falsch mache ?? oder was ich noch implementieren muss ??
danke northdrive
Hallo northdrive,
Ich habe hier ein paar eigentlich nicht schlechte Bücher stehen, aber die Erstellung von Steuerelementen ist in diesen wirklich nicht wundervoll dargestellt...
man braucht m.E. nicht ein Buch direkt über Steuerelemente. Wichtig ist das EventHandling als solches zu verstehen.
Das System beschwert sich, dass es keine Definitionen für load, AutoscaleDimensions...erhält.
Beides kommt in dem Codeausschnitt oben nicht vor. Daher ist es schwer zu sagen, woran es liegt. Aber es scheint mir ja um Syntaxfehler zu gehen. Die sollte man auch als Angänger selber lösen können bzw. lösen lernen.
Leider kann ein Forum auch keine Einfühung in die Programmierung vonm Steuerelementen leisten.
herbviore