Habe jetzt schon eine "tb.TextChanged += new EventHandler
(OnTextBoxChanged)" plus "void OnTextBoxChanged" definiert aber das Löschen
von einzelnen Zeichen mit "tb.Text.Remove" in der Schleife funktioniert
nicht so richtig.
Möchte nur "A-Z und Ä,Ü,Ö,ß zulassen)
dank im vorhinein
Peter
"Peter Cerveny" schrieb
> Habe jetzt schon eine "tb.TextChanged += new EventHandler
> (OnTextBoxChanged)" plus "void OnTextBoxChanged" definiert aber das
Löschen
> von einzelnen Zeichen mit "tb.Text.Remove" in der Schleife funktioniert
> nicht so richtig.
>
> Möchte nur "A-Z und Ä,Ü,Ö,ß zulassen)
Ich habe vielleicht nicht ganz begriffen, was Du willst, aber der übliche
Weg ist doch, im KeyPress-Event die Eingaben zu prüfen und falsche Eingaben
zu unterdrücken:
using System.Text.RegularExpressions;
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Regex.IsMatch(e.KeyChar.ToString(), "[a-zA-ZÄÖÜß]"))
{
e.Handled = true;
}
}
Es spricht auch nichts dagegen, bei falschen Eingaben MessageBoxen,
Hinweise, etc. anzuzeigen.
Gruß
Arne Janning
> Möchte nur "A-Z und Ä,Ü,Ö,ß zulassen)
private void textBox1_TextChanged(object sender, System.EventArgs e)
{ bool ok= !Regex.Match(textBox1.Text, "[^A-ZÄÜÖß]").Success; }
ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP C#]
"Arne Janning" <spam.me-here...@gmx.de> schrieb:
> Es spricht auch nichts dagegen, bei falschen Eingaben MessageBoxen,
> Hinweise, etc. anzuzeigen.
Ich persönlich bevorzuge die Validierung in entsprechenden Ereignissen
('Validating') und nicht direkt bei der Eingabe, damit ein
"in-place"-Bearbeiten des Eingegebenen seitens des Benutzers ermöglicht
wird. Schlägt die Validierung fehl, setze ich einen ErrorProvider mit
Informationen zum Grund für die fehlerhafte Eingabe sowie Hinweisen zur
Richtigstellung, falls der Grund der Invalidität bestimmt werden kann.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>
> private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
> { if (!Regex.IsMatch(e.KeyChar.ToString(), "[a-zA-ZÄÖÜß]"))
> e.Handled = true;
> }
ja richtig, bis auf die a-z, OP wollte nur Großbuchstaben.
"Herfried K. Wagner [MVP]" schrieb
> Ich persönlich bevorzuge die Validierung in entsprechenden Ereignissen
> ('Validating') und nicht direkt bei der Eingabe, damit ein
> "in-place"-Bearbeiten des Eingegebenen seitens des Benutzers ermöglicht
> wird. Schlägt die Validierung fehl, setze ich einen ErrorProvider mit
> Informationen zum Grund für die fehlerhafte Eingabe sowie Hinweisen zur
> Richtigstellung, falls der Grund der Invalidität bestimmt werden kann.
Full ACK, gar keine Frage. Der OP hat nur den Weg mit TextBoxChanged
vorgegeben, womit er offensichtlich Eingaben während der Eingabe testen
will. Wenn ich schon während der Eingabe prüfen will (oder muss), dann mache
ich es eben so, wie ich gepostet habe.
Gruß
Arne Janning
"Arne Janning" <spam.me-here...@gmx.de> schrieb:
>> [Prüfung des Inhalts bei Validierung + ErrorProvider]
>
> Full ACK, gar keine Frage. Der OP hat nur den Weg mit TextBoxChanged
> vorgegeben, womit er offensichtlich Eingaben während der Eingabe testen
> will. Wenn ich schon während der Eingabe prüfen will (oder muss), dann
> mache
> ich es eben so, wie ich gepostet habe.
Genau -- dann würde ich es auch so oder zumindest so ähnlich machen.
"Frank Dzaebel" schrieb
> ja richtig, bis auf die a-z, OP wollte nur Großbuchstaben.
Ich habe den Beitrag des OP durchaus gesehen und mir darüber Gedanken
gemacht.
Die Schwierigkeit in dieser NG ist einzuschätzen, auf welchem Stand der OP
ist. Jemand, der in der Lage ist [a-zA-Z] von [A-Z] zu unterscheiden und mit
Regex vertraut ist, wird in der Regel nicht die Frage stellen, die der OP
nun mal gestellt hat. Das war zumindest meine Überlegung.
Also habe ich "A-Z" nicht als Regex-Pattern interpretiert, sondern als
"normale Buchstaben aus dem Alphabet", habe aber mein Regex-Pattern bewusst
so gestaltet, dass es für dem OP leicht zu ändern ist. Ich hätte ja sonst
auch einfach Regex-Symbole benutzen können.
Gelegentlich liegt man mit den Annahmen über die Kenntnisse des OP auch
falsch. Du magst andere Annahmen zugrunde gelegt haben. Damit lebe ich dann
einfach und
grüße Dich freundschaftlich in Bremen
Arne Janning
Das geht so:
- benutzerdefiniertes Control (Ableitung von
System.Windows.Forms.TextBox) anlegen
- KeyPress-Event-Handler anlegen, z.B. in InitializeComponent
this.KeyPress += new
System.Windows.Forms.KeyPressEventHandler(this.OnKeyPress);
- innerhalb des Event-Handlers:
void OnKeyPress(object sender, KeyPressEventArgs e)
{
// e.KeyChar gibt das gedrückte Zeichen an
// e.Handled = true setzen und return, wenn ein Zeichen unterdrückt
werden soll
// e.Handled = false setzen und return, falls die Eingabe vom
System behandelt werden soll
}
Ansonsten kannst du auch mal hier reinschauen:
http://www.akadia.com/services/dotnet_user_controls.html
(im Beispiel dort wird zwar mit nicht so geschicktem 'overloading' statt
Event-Handling gearbeitet, aber das Prinzip sollte klar werden).
Grüße
- Michael -
> Das geht so: - benutzerdefiniertes Control .... - KeyPress-Event anlegen...
Da braucht man aber nicht extra ein benutzerdefiniertes Control.
Schau mal in Arnes Posting.
"Frank Dzaebel" <PostAddFranksSeitePunktDe> schrieb:
>> Das geht so: - benutzerdefiniertes Control .... - KeyPress-Event
>> anlegen...
>
> Da braucht man aber nicht extra ein benutzerdefiniertes Control.
> Schau mal in Arnes Posting.
Wenn man das Steuerelement wiederverwenden will, kann man entweder von
'TextBox' ableiten und die Klasse entsprechend erweitern, oder man schreibt
eine Extender-Komponente. Benutzerdefinierte Steuerelemente im Sinne von
UserControls sind etwas anderes.
> Wenn man das Steuerelement wiederverwenden will, kann man entweder von
> 'TextBox' ableiten und die Klasse entsprechend erweitern, oder man schreibt
> eine Extender-Komponente. Benutzerdefinierte Steuerelemente im Sinne von
> UserControls sind etwas anderes.
Allgemein kann man das natürlich alles so machen.
Frage war aber vom OP nicht in Richtung Wiederverwendbarkeit gestellt.
Selbst wenn, und man *ohne* benutzerdefiniertes Control arbeitet,
ist das Zufügen des Events an den Handler für jede Textbox kein
Aufwand. Man markiert einfach alle Textboxen, geht auf den gelben Blitz
und fügt den Handler zu. Sicher bei sehr vielen TextBoxen würde
ich natürlich irgendwann auch ein Control nehmen.
Für die Aufgabe des OP ist das Code-Overhead.
"Frank Dzaebel" <PostAddFranksSeitePunktDe> schrieb:
> Frage war aber vom OP nicht in Richtung Wiederverwendbarkeit gestellt.
> Selbst wenn, und man *ohne* benutzerdefiniertes Control arbeitet,
> ist das Zufügen des Events an den Handler für jede Textbox kein
> Aufwand. Man markiert einfach alle Textboxen, geht auf den gelben Blitz
> und fügt den Handler zu. Sicher bei sehr vielen TextBoxen würde
> ich natürlich irgendwann auch ein Control nehmen.
> Für die Aufgabe des OP ist das Code-Overhead.
Bei einem Formular und einem einzigen Projekt hast du sicher recht.
Vielen Dank für die prompte Hilfe, dass mit dem OnKeyPress hat funktioniert.
Ich habe es jetzt so gemacht, das funktioniert.
tb.KeyPress += new KeyPressEventHandler (OnKeyPressed);
void OnKeyPressed (object sender, KeyPressEventArgs kpea)
{
int ch = Convert.ToInt32 (kpea.KeyChar);
Console.WriteLine ("KeyChar = {0} / ch = {1}", kpea.KeyChar, ch);
if (((ch > 64) && // grösser als "@" also ab "A"
(ch < 91)) || // kleiner als "[" also bis "Z"
((ch > 96) && // grösser als "`" also ab "a"
(ch < 123)) || // kleiner als "{" also bis "z"
(ch == 196) || // das grosse "Ä"
(ch == 214) || // das grosse "Ö"
(ch == 220) || // das grosse "Ü"
(ch == 223) || // das "ß"
(ch == 228) || // das kleine "ä"
(ch == 246) || // das kleine "ö"
(ch == 252)) // das kleine "ü"
{
kpea.Handled = false;
return;
}
else
{
kpea.Handled = true;
return;
}
}
Vielen Dank nochmal für eure Tipps, wie immer "bei euch wird mir geholfen".
Gruss Peter
"Peter Cerveny" <peter....@chello.at> schrieb im Newsbeitrag
news:SX%zd.9738$BO5....@news.chello.at...