Avatar billede weis Nybegynder
02. november 2007 - 18:53 Der er 11 kommentarer og
1 løsning

Automatisk indsætte en streg i textbox efter hvert andet tegn

Jeg har en textbox som kan indeholde 20 tegn. Jeg vil gerne have lavet det sådan, at imens jeg indtaster tegn i denne box, så kommer der automatisk en bindestreg "-" efter hvert andet tegn. Og stregen skal også forsvinde hvis man sletter noget igen.

Kan dette lade sig gøre?
Avatar billede nielle Nybegynder
02. november 2007 - 20:06 #1
Et par spørgsmål:

Windows eller Web? Det er jo rimeligt relevant at vide.

Når du nu skriver "... efter hvert andet tegn", mener du så A) eller B):

A) ab-cd-ef-gh-
B) a-b-c-d-e-f-g-h-

Hvad skal der ske, hvis man selv skriver et '-'?

Hvad hvis man placere markøren midt i strengen og begynder at slette?
Avatar billede weis Nybegynder
02. november 2007 - 20:36 #2
Det er til Windows og så er det mønster A

Man kan ikke skrive et '-' det er begrænsning på nogle bestemte tegn.

Hvis man sletter, så skal stregerne flytte sig, så der altid er to tegn imellem dem
Avatar billede nielle Nybegynder
02. november 2007 - 21:03 #3
Noget i denne stil?

        private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right ||
                e.KeyCode == Keys.Home || e.KeyCode == Keys.End)
                return;

            TextBox tb = sender as TextBox;
            int currPos = tb.SelectionStart;

            string text = tb.Text;
            text = text.Replace("-", "");

            string textFormated = "";
            for (int i = 0; i < text.Length; i++)
            {
                textFormated += text[i];
                if (i % 2 == 1) textFormated += '-';
            }

            tb.Text = textFormated;
            tb.SelectionStart = currPos + 1;
        }
Avatar billede bitmatic Nybegynder
03. november 2007 - 16:58 #4
Jeg er helt enig med nielle, men denne situation er præcis det man skal bruge en stringbuilder til... string er desværre usandsynligt langsom til at lave += fordi den er immutable, og derfor kan koden give problemer med lange tekster.

Jeg kan ikke helt huske syntaksen, men prøv noget lignende af det her i stedet:

        private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Left || e.KeyCode == Keys.Right ||
                e.KeyCode == Keys.Home || e.KeyCode == Keys.End)
                return;

            TextBox tb = sender as TextBox;
            int currPos = tb.SelectionStart;

            string text = tb.Text;
            text = text.Replace("-", "");

            StringBuilder textFormated = new StringBuilder();
            for (int i = 0; i < text.Length; i++)
            {
                textFormated.Append(text[i]);
                if (i % 2 == 1) textFormated.Append('-');
            }

            tb.Text = textFormated.ToString();
            tb.SelectionStart = currPos + 1;
        }
Avatar billede nielle Nybegynder
03. november 2007 - 19:50 #5
Jeg mener nu ikke at der er en speciel grund til at bruge en stringbuilder når det blot drejer sig om at følge med i indput fra keyboardet. :^)

Men ja, stringbuildere performer bedre, end +, når det drejer sig om at opbygge en streng tegn for tegn. :^)
Avatar billede weis Nybegynder
03. november 2007 - 20:58 #6
hej det virker næsten, men der kommer en streg til sidst, som helst ikke skal være det, kan det undgås?
Avatar billede nielle Nybegynder
03. november 2007 - 21:02 #7
Prøv at rette til:

tb.Text = textFormated.TrimEnd('-');
Avatar billede nielle Nybegynder
03. november 2007 - 21:03 #8
Eller:

tb.Text = textFormated.ToString().TrimEnd('-');

hvis du vælger bitmatic's variant. :^)
Avatar billede weis Nybegynder
11. november 2007 - 15:38 #9
I må gerne begge komme med et svar, har brugt lidt fra det hele :)
Avatar billede nielle Nybegynder
11. november 2007 - 15:43 #10
Svar :^)
Avatar billede bitmatic Nybegynder
11. november 2007 - 15:59 #11
meh... Nielle har gjort alt arbejdet. Giv ham pointene.
Avatar billede nielle Nybegynder
11. november 2007 - 22:52 #12
Takker for point :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester