Laden...

Mehrere Textboxen 1 Funktion

Erstellt von LeChimp vor 13 Jahren Letzter Beitrag vor 13 Jahren 5.142 Views
LeChimp Themenstarter:in
25 Beiträge seit 2009
vor 13 Jahren
Mehrere Textboxen 1 Funktion

Hallo

Programmiere nicht immer mit C# und bin wirklich ein Anfänger.
Habe folgendes problem,
"Spiele" gerdade ein bischen mit C#. Ich habe im Programm mehrere textboxen (ca. 50) textboxen, in die nur Zahlen vorkommen werden, dass funktioniert bereits.
Aber ich will nicht in jeder textBox3_TextChanged.. die zahlenfunktion reinkopieren
sonder alle 50 Textboxen sollen dahin abgeleitet werden, d.h die zahlenfunktion soll wissen aus welcher Textbox der befehl gerade kommt, oder ob es aus textBox1, textBox40, usw. ist.

private void textBox3_TextChanged(object sender, EventArgs e)
{
            txt = textBox3.Text;
            
            if (txt.Length > 2)
                textBox3.Clear();

           //Zahlenfunktion, die nur Zahlen in der Textbox zulässt
           // Wie sende ich an ClearTextBox_TextChangedHandler 
           // aus welche textbox die information kommt?
            ClearTextBox_TextChangedHandler(sender, e);
}

Nur mein proglem ist, mir fehlt dass Fachchargon um as Ziel zu kommen bzw. Hilfe im Netz zu suchen.

Ich möchte jetzt keine Lösung sonder nur Tipps.

Vielen Dank

3.825 Beiträge seit 2006
vor 13 Jahren

Hallo Chimp,

trage bei allen Textboxen im Ereignis "KeyPress" KeyPress ein.

Ungefähr so kann KesPress dann aussehen :

private void KeyPress(object sender, KeyPressEventArgs e)
{
    string str = "1234567890";
    if (!str.Contains(e.KeyChar.ToString()) e.Handled = true;
}

Ist nur ein Tipp, denn Du musst auch die Tasten Return und Escape erlauben. Ausserdem müssen je nach Zahlentyp auch '+', '-' und ',' erlaubt werden.

Oder schau hier : [FAQ] In einer TextBox nur bestimmte Zeichen/Eingaben zulassen

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

2.082 Beiträge seit 2005
vor 13 Jahren

Hallo LeChimp,

du kannst jeder TextBox die gleiche Methode zuweisen, um das TextChanged-Event abzuhören.

etwa so in der art:

tb.TextChanged += new EventHandler(Generic_TextChanged);

private void Generic_TextChanged(oject sender, EventArgs e) {
    TextBox tbSender = sender as TextBox;
    if(tbSender != null) {
        // DoSomething
    }
}

Im Konsruktor deiner Form kannst du die Controls der Form durchlaufen und den Event entsprechend anhängen.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

916 Beiträge seit 2008
vor 13 Jahren

Am besten aus meiner Sicht wäre es dir eine eigene Textbox Control zu erstellen indem du dich von einer Standard TextBox ableitest und dann dort das OnTextChanged Event überschreibst. Dann musst du gar nichts mehr machen, sondern kannst die Textboxen so verwenden.

Again what learned...

J
3.331 Beiträge seit 2006
vor 13 Jahren

Am besten aus meiner Sicht wäre es dir eine eigene Textbox Control zu erstellen indem du dich von einer Standard TextBox ableitest ... Dann musst du gar nichts mehr machen, sondern kannst die Textboxen so verwenden.

Die **MaskedTextBox **kann das von Haus aus.

Zur Eingangsfrage "gleiche Funktionalität" ist frischs Antwort die wichtigste und richtigste.

Jürgen

3.825 Beiträge seit 2006
vor 13 Jahren

Hallo Chimp,

sonder alle 50 Textboxen sollen dahin abgeleitet werden, d.h die zahlenfunktion soll wissen aus welcher Textbox der befehl gerade kommt, oder ob es aus textBox1, textBox40, usw. ist.

Wenn Du doch eine Routine in TextChanged benutzen willst dann übergibst Du in 'sender' die Textbox.

if (((TextBox)sender).Name == "...") ...

Die 'MaskedTextBox-Klasse' ist auch eine gute Idee.

Ich möchte jetzt keine Lösung sonder nur Tipps.

Ich glaube Du hast genug Tipps bekommen.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

LeChimp Themenstarter:in
25 Beiträge seit 2009
vor 13 Jahren

Danke Jungs,

genau, bin schon weiter gekommen !!!
Vielen Dank für die Tipps, so macht es richtig Spass !!

2.921 Beiträge seit 2005
vor 13 Jahren

Ganz andere Möglichkeit noch im Hinblick auf das Command-Pattern


namespace ImageRecognition2.Action
{
    public class ActionDither : AbstractCommand
    {
        private PictureBox m_PictureBox = null;

        public ActionDither(PictureBox _pictureBox)
        {
            m_PictureBox = _pictureBox;
        }

        public override void Run(object sender, EventArgs e)
        {
            Bitmap bitmap = (Bitmap)m_PictureBox.BackgroundImage;
            BaseImageFilter filter = new Dither();
            filter.Execute(bitmap);
            Bitmap bitmapDithered = filter.Bitmap;
            m_PictureBox.BackgroundImage = bitmapDithered;
        }
    }
}

Ist zwar ähnlich, aber nicht gleich - warum nicht? beide Filter erben von einer gemeinsamen BasisFilterKlasse - trotzdem wird der EdgeFilter nur executet, beim Dither aber noch zusätzlich filter.Bitmap abgerufen.?.

Die Run-Methode hat dieselbe Signatur wie ein üblicher Eventhandler, und ich fänds glaub einfacher, den Code auch tatsächlich in einen echten Eventhandler reinzuschreiben, statt des in Form1 gegangenen Umwegs über eine Methode SetEventHandler

C#-Code:


        public void SetEventHandler(ToolStripMenuItem _item, ICommand _icommand)
        {
            _item.Tag = _icommand;
            _item.Enabled = true;
            _item.Click += delegate(object sender, EventArgs e)
            {
                ExecuteAction(_item.Tag,EventArgs.Empty);
                this.pictureBox1.Invalidate();
                Debug.WriteLine(_icommand.Description);
            };
        }

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.