Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

c# AutoTab?

Empfohlene Antworten

Veröffentlicht

Hallo Leute,

habe zwei TextBoxen 1-2 mit der max. Länge von zwei Zeichen und jetzt möchte ich, wenn die TextBox 1 die max. Länge erreicht, automatisch auf die TextBox2 springt.

Wie geht das?


        public Form1()

        {

            InitializeComponent();

        }


        private void textBox1_TextChanged(object sender, EventArgs e)

        {



        }


        private void textBox2_TextChanged(object sender, EventArgs e)

        {


        }

    }

}

Danke im Voraus!

Das müsstest du eigentlich mit einer einfachen IF-Abfrage realisieren können.

Mit den Events TextChanged hast du schon richtig angefangen. Ich würde es dann so schreiben, dass du für dein TextBox1 Control dieses Event anlegst:


private void textBox1_TextChanged(object sender, EventArgs e)

{          

}

und dann fügst du dort die IF-Abfrage ein die testet wieviel Zeichen in der Textbox enthalten sind. Wenn du eine Zeichenlänge von 2 Zeichen erreicht hast wird automatisch die TextBox2 selektiert:

if(TextBox1.Text.Lenght == 2)

{

TextBox2.Focus();

}

So sollte es eigentlich klappen! Aber gleichzeitig würde ich noch eine Überprüfung mit einbauen die testet ob mehr als 2 Zeichen eingegeben worden sind. Es kann ja sein das jemand ein Wort in seiner Kopierablage hat und das einfügt. Würde ich aber auch mit einer IF-Abfrage machen...

if(TextBox1.Text.Lenght > 2)

{

lblError.Text = "Bitte nur 2 Zeichen eingeben!";

TextBox1.Text = null;

}

lblError ist dabei nur ein einfaches Labelcontrol und wenn die TextBox1 mehr als 2 Zeichen hat wird die das Label mit einer Fehlermeldung ausgegeben und die TextBox1 wieder auf Null gesetzt.

Gruß

Hahne

Bearbeitet von Hahne

OK THX, ich veruchs mal gleich.

Es hat alles geklappt!!

Leider funktioniert es nicht so wie ich mir das vorgestellt habe. :(

Wenn ich jetzt per Hand eintippe springt er von einer Box auf die andere, aber wenn ich 4 Zeichen kopiere und einfüge, springt er nicht in die zweite Box.

Wie kriege ich das hin? :confused:

Aber erstmal Danke für die vorige Lösung!!

du meintest doch, dass nur 2 zeichen maximal zugelassen werden sollen oder nicht??? wenn das nich der fall is musst du die fehlerprüfung mit dem größer zwei entfernen

du meintest doch, dass nur 2 zeichen maximal zugelassen werden sollen oder nicht??? wenn das nich der fall is musst du die fehlerprüfung mit dem größer zwei entfernen

Nein nein, dass ist schon richtig mit zwei Zeichen!!

Ich habe zwei Boxen in jede Box dürfen nur zwei Zeichen rein.

Ich möchte wenn ich z.B. den Text: ABCD habe, kopieren und einfügen können.

Leider geht das jetzt nicht, nur wenn ich per Hand ABCD tippe, kopieren (copy) und einfügen (paste) geht nicht. Er bleibt dann bei der ersten Box hängen mit AB.

Hast du vielleicht ne Idee wie man das machen könnte?

Leider geht das jetzt nicht, nur wenn ich per Hand ABCD tippe, kopieren (copy) und einfügen (paste) geht nicht. Er bleibt dann bei der ersten Box hängen mit AB.
Ja, so sah deine Anforderung bisher auch aus.

Du willst also nicht nur, dass dein Programm die Eingabe auf 2 Zeichen beschränkt, sondern auch alles, was über 2 Zeichen hinausgeht, in das nächste Textfeld verschiebt?

Ja, so sah deine Anforderung bisher auch aus.

Du willst also nicht nur, dass dein Programm die Eingabe auf 2 Zeichen beschränkt, sondern auch alles, was über 2 Zeichen hinausgeht, in das nächste Textfeld verschiebt?

Genau!

Am besten noch das er alle Leerzeichen ignoriert.

substring von 0 bis 1 in txt1 und von 2 (bis Ende) in txt2. :floet:

Wie sieht die Syntax genau aus?

Bearbeitet von Godfather_d

Wie sieht die Syntax genau aus?

Also ich habe das jetzt so verstanden, dass wenn du über Strg + V eine Zeichenfolge einfügst (Bsp. ABCDEFG) aber nur die ersten beiden Zeichen (AB) in der Textbox1 und den Rest (CDEFG) in Textbox2 haben willst würde ich das so lösen, dass du folgenden Code durch deine Fehlerbehandlung ersetzt:


TextBox2.Text = TextBox1.Text.SubString(2);

SubString bedeutet hier nichts anderes als das du den gesamten String aus der Textbox1 erst ab der Stringstelle 3 liest.

Also ich habe das jetzt so verstanden, dass wenn du über Strg + V eine Zeichenfolge einfügst (Bsp. ABCDEFG) aber nur die ersten beiden Zeichen (AB) in der Textbox1 und den Rest (CDEFG) in Textbox2 haben willst würde ich das so lösen, dass du folgenden Code durch deine Fehlerbehandlung ersetzt:


TextBox2.Text = TextBox1.Text.SubString(2);

Fast, ich möchte nach Strg + V die Zeichenfolge ABCDEFG, dass die Box1 "AB" drinne hat und Box2 "CD" und so weiter.

Das soll ungefähr wie eine Key Eingabe bei spielen werden.

Siehe:

post-25349-14430447978955_thumb.jpg


TextBox2.Text = TextBox1.Text.SubString(2);

SubString bedeutet hier nichts anderes als das du den gesamten String aus der Textbox1 erst ab der Stringstelle 3 liest.
Richtig, der Vollständigkeithalber sollte es aber so aussehen:

TextBox2.Text = TextBox1.Text.SubString(2);

TextBox1.Text = TextBox1.Text.Substring(0,1);

Fast, ich möchte nach Strg + V die Zeichenfolge ABCDEFG, dass die Box1 "AB" drinne hat und Box2 "CD" und so weiter.
ok, dann hab ichs falsch verstanden. Dachte du hast nur zwei Textboxen. Dann zähl doch einfach hoch, mach ein array über alle Textboxen und iteriere:

TextBox[] txtArray;

string serial;

//beide irgendwie füllen

for(int i = 0, j = 0; i < txtArray.Length; i++)

{

    txtArray[i].Text = serial.substring(j, j+1);

    j+=2;

}

So oder so ähnlich, vgl mit: http://forum.fachinformatiker.de/java/117387-string-splitten.html

(Ist zwar java, aber die Idee hilft vielleicht.)

Bearbeitet von TDM

ok, dann hab ichs falsch verstanden. Dachte du hast nur zwei Textboxen.

Dann zähl doch einfach hoch, mach ein array über alle Textboxen und iteriere:


TextBox[] txtArray;

string serial;

//beide irgendwie füllen

for(int i = 0, j = 0; i < txtArray.Length; i++)

{

    txtArray[i].Text = serial.substring(j, j+1);

    j+=2;

}

So das dachte ich mir auch schon, dass ich wahrscheinlich mit Arrays arbeiten muss, jedoch komme ich leider mit Arrays nicht so gut klar. :upps Fangen wir mal ganz langsam an mit zwei Boxen:

        private void textBox1_TextChanged(object sender, EventArgs e)

        {



        }


        private void textBox2_TextChanged(object sender, EventArgs e)

        {


        }

Ich wollte auch das alle Leerzeichen ignoriert werden, habe was von »Trim« gelesen.

[B]TextBox[] txtArray;

string serial;

int[] store = {0, 1, 2, 3, 4, 16};

//beide irgendwie füllen

for(int i = 0, j = 0; i < txtArray.Length; i++)

{[/B]


        private void textBox1_TextChanged(object sender, EventArgs e)

        {

            if (textBox1.Text.Length == 2)

            {



        [B]txtArray[i].Text = serial.substring(j, j+1);

           j+=2;[/B]


                textBox2.Focus();


        }


        private void textBox2_TextChanged(object sender, EventArgs e)

        {


        }

[B]}[/B]

Irgendwie hab ich keine ahnung wie ich das machen soll :confused:

Ich hab grad mal nen kleines Beispiel geschrieben, anstatt von Textboxen nehm ich aber nur Stringarrays (kommt am ende aufs selbe raus):


        static void Main(string[] args)

        {

            string[] serialParts = new string[5];

            string serial = "abc def2335";


            serial = serial.Replace(" ", "");

            for (int i = 0, a = 0; i < serial.Length; i += 2, a++)

            {

                string part = string.Empty;

                if (i + 1 < serial.Length)

                    part = serial.Substring(i, 2);

                else

                    part = serial[i].ToString();

                serialParts[a] = part;

            }


            for (int i = 0; i < serialParts.Length; i++)

            {

                Console.WriteLine("Part({0}): {1}", i, serialParts[i]);

            }


            Console.Read();

        }

Anmerkung: Die Funktion trim ersetzt nur Leerzeichen am Anfang und am Ende, deswegen hier Replace (es sei denn leerzeichen gehören zum serial).

Ich hab grad mal nen kleines Beispiel geschrieben, anstatt von Textboxen nehm ich aber nur Stringarrays (kommt am ende aufs selbe raus):


        static void Main(string[] args)

        {

            string[] serialParts = new string[5];

            string serial = "abc def2335";


            serial = serial.Replace(" ", "");

            for (int i = 0, a = 0; i < serial.Length; i += 2, a++)

            {

                string part = string.Empty;

                if (i + 1 < serial.Length)

                    part = serial.Substring(i, 2);

                else

                    part = serial[i].ToString();

                serialParts[a] = part;

            }


            for (int i = 0; i < serialParts.Length; i++)

            {

                Console.WriteLine("Part({0}): {1}", i, serialParts[i]);

            }


            Console.Read();

        }

Anmerkung: Die Funktion trim ersetzt nur Leerzeichen am Anfang und am Ende, deswegen hier Replace (es sei denn leerzeichen gehören zum serial).

OK erstmal ein FETTES DANKE!!!!!

Ich versuche es mal einzusetzen, mal gucken ob es klappt.

Hm, ich habs versucht leider weiß ich nicht genau an welcher Stelle der Quellcode hin muss?

Und was ich genau verändern bzw. anpassen soll?

Muss nur noch das hinbekommen, dann bin ich fertig mit meinem Programm. :cool:

In die Textchangemethode muss das.

Alleine wenn ich das so reinstelle bekomme ich ne Fehlermeldung:


        private void Box1_TextChanged(object sender, EventArgs e)

        {


           [B] static void Main(string[] args)

        {

            string[] serialParts = new string[5];

            string serial = "abc def2335";


            serial = serial.Replace(" ", "");

            for (int i = 0, a = 0; i < serial.Length; i += 2, a++)

            {

                string part = string.Empty;

                if (i + 1 < serial.Length)

                    part = serial.Substring(i, 2);

                else

                    part = serial[i].ToString();

                serialParts[a] = part;

            }


            for (int i = 0; i < serialParts.Length; i++)

            {

                Console.WriteLine("Part({0}): {1}", i, serialParts[i]);

            }


            Console.Read();

        }[/B]


        }

Und mein Debugger sagt das hier:

fehlermeldungbh9.jpg

erm... lass mich raten - du programmierst noch nicht lange c#?!


private void Box1_TextChanged(object sender, EventArgs e)

        {


            string[] serialParts = new string[5];

            string serial = "abc def2335";


            serial = serial.Replace(" ", "");

            for (int i = 0, a = 0; i < serial.Length; i += 2, a++)

            {

                string part = string.Empty;

                if (i + 1 < serial.Length)

                    part = serial.Substring(i, 2);

                else

                    part = serial[i].ToString();

                serialParts[a] = part;

            }


        }

So müsste das aussehen, musst du natürlich noch anpassen, damit es in die Checkboxen eingetragen wird...

Ja das stimmt, habe leider nicht sehr viel ahnung davon. :(

Ich muss doch jetzt nur noch überall wo serial steht meine Textbox Eintragen?


            string[] serialParts = new string[5];

            string serial = "abc def2335";


            serial = serial.Replace(" ", "");

            for (int i = 0, a = 0; i < serial.Length; i += 2, a++)

            {

                string part = string.Empty;

                if (i + 1 < serial.Length)

                    part = serial.Substring(i, 2);

                else

                    part = serial[i].ToString();

                serialParts[a] = part;

            }

so keine Fehlermeldung. :) Danke!

Jetzt stell sich mir die Frage wo ich meine TextBox1 bis 16 Eintragen muss?

Wieso wird hier was hardcodiert?: string serial = "abc def2335";

Soweit ich das sehe muss ich doch bei Serial die TextBoxen Eintragen?

Da die Serial ja hochgezählt wird oder?

serial.ToString();

Textbox[1-16].ToString();

Wenn ich die TextBox Eintrage, muss ich sie TextBox oder TextBox.Text Eintragen?

P.S.

Danke für deine mühe mir zu helfen!!!! :uli

serial war nur im Beispiel, damit ich eine Seriennummer hab.

Die Textboxen entsprechen serialParts.

Natürlich muss du bedenken, dass, wenn du eine Seriennummer eingibst, unterschieden werden muss, zwischen manueller eingabe und copy&paste.

Das beispiel von mir ist nur, wenn du eine Seriennummer reinkopierst, eine einfache eingabe wird dadurch nicht behandelt.

Erstmal würd ich sagen, versuch ich die Copy/Paste Variante zum laufen zu bringen und dann versuch ich die zwei Parts zu mixen.

Also ich hab das jetzt gemacht:


        private void Box1_TextChanged(object sender, EventArgs e)


{


[B]

            string[] [COLOR="Red"]Box[/COLOR] = new string[5];

            string serial = "abc def2335";


            serial = serial.Replace(" ", "");

            for (int i = 0, a = 0; i < Box.Length; i += 2, a++)

            {

                string part = string.Empty;

                if (i + 1 < Box.Length)

                    part = Box.Substring(i, 2);

                else

                    part = Box[i].ToString();

                [COLOR="Red"]Box[/COLOR][a] = part;

            }[/B]


}

Bekomme keine Fehlermeldung, jedoch funktioniert es noch nicht? Oder:

        private void Box1_TextChanged(object sender, EventArgs e)


{


[B]

            string[] [COLOR="Red"]Box[/COLOR] = new string[5];


            Box = Box.Replace(" ", "");

            for (int i = 0, a = 0; i < serial.Length; i += 2, a++)

            {

                [COLOR="Red"]Box[/COLOR] = string.Empty;

                if (i + 1 < Box.Length)

                    part = Box.Substring(i, 2);

                else

                    part = Box[i].ToString();

                [COLOR="Red"]Box[/COLOR][a] = part;

            }[/B]


}

Bearbeitet von Godfather_d

Also...

Ich habs mal mit oberfläche gemacht und einfach paar Textboxen eingefügt.

Im Konstruktor merk ich mir alle Textboxen und geh die später durch.


    public partial class Form1 : Form

    {

        public List<TextBox> serialTextBoxes = new List<TextBox>();

        public Form1()

        {

            InitializeComponent();


            foreach (TextBox txt in this.Controls)

            {

                serialTextBoxes.Add(txt);

            }

        }


        private void textBox1_TextChanged(object sender, EventArgs e)

        {

            TextBox txt = sender as TextBox;

            if (txt == null) return;

            string serial = txt.Text;

            if (serial.Length <= 2) return;


            serial = serial.Replace(" ", "");

            for (int i = 0, a = serialTextBoxes.Count - 1; i < serial.Length && a >= 0; i += 2, a--)

            {

                string part = string.Empty;

                if (i + 1 < serial.Length)

                    part = serial.Substring(i, 2);

                else

                    part = serial[i].ToString();

                serialTextBoxes[a].Text = part;

            }

        }

    }

So, den Rest darfst du erstmal allein machen. :rolleyes:

JUUUUUUUHHHHHHHUUUU es klappttttt!!!! :):D

DANKE DANKE DANKE!!!!!!!!!! :uli :bimei :uli :bimei

Aber andererseits bin ich nicht so froh, da ich das nicht gemacht habe bzw. noch schlimmer ich den Quellcode zu 80% nicht verstehe. :(

Ich versuch mal den Code dann in einzelteile zu zerlegen und poste sie dann hier, kannst du sie mir dann erklären?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.