Avatar billede GoofyDK Nybegynder
20. november 2010 - 11:24 Der er 33 kommentarer og
1 løsning

En hvis længde på en textbox er større end xx skal den deles op.

Hej igen.

Nu er jeg igang med at rode lidt med, hvis textBox5.text er længere (.Length) end 200. Så skal den deles op.
Jeg kunne forstille mig, at jeg skal bruge noget ala:
List<string> textBox5.text = new List<string>();

Men jeg er ikke sikker.
Den skal nemlig sende fra textBox5 til textBox1, og hvis den er længere end de 200. Så skal den skrive det på to forskellige linjer.

Håber I forstår mig, ellers må I lige sige til.

God Lørdag.
Avatar billede oneeighty Nybegynder
20. november 2010 - 12:02 #1
Hvad med noget ala det her?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        if (textBox1.Text.Length > 3)
            textBox2.Focus();
    }
}
Avatar billede GoofyDK Nybegynder
20. november 2010 - 12:21 #2
Nej det er ikke sådan noget jeg mener.

Hvis vi siger længen max må være 10 og teksten er sådan:

Hej med jer alle sammen, hvordan har I det?

Der er 43, og hvis man går 10 hen, så slutter den på "hej med je" - her skulle den så gerne tage det sidste ord med, eller smide det på den næste linje der skal komme.

Det sådan noget jeg tænker på :)
Avatar billede Syska Mester
20. november 2010 - 12:57 #3
var the10First = "Her er en lang string".Substring(0, 10);
Avatar billede GoofyDK Nybegynder
20. november 2010 - 13:16 #4
Ja Buz, men hvor er den sidste tekst så?
Avatar billede GoofyDK Nybegynder
20. november 2010 - 13:19 #5
int max = 150;
            StringBuilder builder = new StringBuilder();
            string current;
            List<string> outputs = new List<string>();
            for (int i = 0; i < textBox5.Text.Length; i++)
            {
                current = String.Format(textBox5.Text);
                if (builder.Length + current.Length > max)
                {
                    outputs.Add(builder.ToString());
                    builder = new StringBuilder();
                }
                builder.Append(current);
            }
            outputs.Add(builder.ToString());
            if (textBox5.Text.Length == 0)
                textBox1.Text += "Der er ingen tekst";
            else
                foreach (string cur in outputs)
                {
                    textBox1.Text += cur;
                    textBox5.Clear();
                }

Prøvede at lave noget ud af det, men den spammer textBox1 i stedet for.
Avatar billede Syska Mester
20. november 2010 - 13:22 #6
var the10First = "Her er en lang string".Substring(0, 10);
var theLastPart = "Her er en lang string".Substring(10);

Husk at kontrollere at der også er 10 tegn eller over, ellers vil du få en Exception hvis der er mindre end 10 tegn.

mvh
Avatar billede GoofyDK Nybegynder
20. november 2010 - 13:39 #7
Okey, men hvad så hvis der er 600 linjer, så kommer der jo problemer.

Men kan du se fejlen i scriptet i #5?
Avatar billede oneeighty Nybegynder
20. november 2010 - 13:54 #8
Det her burde virker
public partial class Form1 :
{
    public Form1()
    {
        InitializeComponent();

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (textBox1.Text.Length >= 10)
        SplitAtNewWord(textBox1.Text);
}

private void SplitAtNewWord(string sentence)
{
    int lengthOfSentence = sentence.Length - 1;
    char lastLetterInSentence = sentence[lengthOfSentence];
    string startOfNextSentence = string.Empty;

    while (char.IsLetter(lastLetterInSentence) && lengthOfSentence > 0)
    {
        startOfNextSentence += char.ToString(lastLetterInSentence);
        lengthOfSentence--;
        lastLetterInSentence = sentence[lengthOfSentence];
    }
           
    string remainingChars = sentence.Substring(0, lengthOfSentence);
    textBox1.Text = remainingChars;
    char[] charArray = startOfNextSentence.ToCharArray().Reverse().ToArray();
            Array.ForEach<char>(charArray, c => textBox2.Text += char.ToString(c));
    }       
}
Avatar billede arne_v Ekspert
20. november 2010 - 14:07 #9
Fra lageret:

        public static string SplitLines(string s, int maxlen, string del)
        {
            StringBuilder res = new StringBuilder("");
            string[] word = s.Split(" ".ToCharArray());
            int ix = 0;
            string line = "";
            while(ix < word.Length)
            {
                if((line + 1 + word[ix]).Length > maxlen)
                {
                    line += del;
                    res.Append(line);
                    line = "";
                }
                if(line.Length > 0)
                {
                    line += " ";
                }
                line += word[ix];
                ix++;
            }
            if(line.Length > 0)
            {
                line += del;
                res.Append(line);
            }
            return res.ToString();
        }

eksempel på kald:

SplitLines("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In commodo. Mauris nec ipsum. Donec tincidunt. Aliquam erat volutpat. Pellentesque aliquam. Donec interdum malesuada arcu. Duis risus posuere.", 20, "\r\n")
Avatar billede GoofyDK Nybegynder
20. november 2010 - 14:12 #10
oneeighty: Det virer ikke helt korrekt, for den fjerner et ord fra textbox5 og skriver det i textbox1.
Avatar billede oneeighty Nybegynder
20. november 2010 - 14:18 #11
Var det ikke pointen når ordet var for langt?
Avatar billede GoofyDK Nybegynder
20. november 2010 - 14:19 #12
Arne: Det ser fornuftigt ud. Men umiddelbart vil den ikke samarbejde med min textBox5.text - så det skal jeg lige kigge på.

Oneeighty: Nej, den skulle dele det op på to linjer f.eks. Noget ala Arnes kode. :-)
Avatar billede arne_v Ekspert
20. november 2010 - 14:20 #13
Hvis TextBox'en har MultLine = true, så bør \r\n give linie skift.
Avatar billede GoofyDK Nybegynder
20. november 2010 - 14:22 #14
Arne:

Hvis jeg benytter denne;

        public void Dat(string data)
        {
            textBox1.Text += "Besked: " + data + "\r\n";
            textBox1.Select(textBox1.Text.Length, 0);
            textBox1.ScrollToCaret();
        }

Og jeg f.eks. bruger din kode:

Dat(SplitLines("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In commodo. Mauris nec ipsum. Donec tincidunt. Aliquam erat volutpat. Pellentesque aliquam. Donec interdum malesuada arcu. Duis risus posuere.", 20, "\r\n"));

Hvordan kan jeg så slette "\r\n\" og det fungere så den løber hver linje igennem med dit splitlines?
Avatar billede arne_v Ekspert
20. november 2010 - 14:31 #15
Du skal nok snarere:

        public void Dat(string data)
        {
            string s = textBox1.Text + SplitLines("Besked: " + data) + "\r\n";
            textBox1.Text = s;
            textBox1.Select(textBox1.Text.Length, 0);
            textBox1.ScrollToCaret();
        }

og kalde med:

Dat("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In commodo. Mauris nec ipsum. Donec tincidunt. Aliquam erat volutpat. Pellentesque aliquam. Donec interdum malesuada arcu. Duis risus posuere.")

eller snarere med:

Dat(varmeddinbesked)
Avatar billede GoofyDK Nybegynder
20. november 2010 - 16:15 #16
Jeg får denne fejl: No overload for method 'SplitLines' takes 1 arguments

Med denne linje: string s = textBox1.Text + SplitLines("Besked: " + data) + "\r\n";


Din SplitLines, den kan ikke laves mere smart? Så jeg bliver fri for "\r\n"? :-)
Avatar billede arne_v Ekspert
20. november 2010 - 16:38 #17
Ups.

Tilføj længde o "\r\n" til det kald.
Avatar billede GoofyDK Nybegynder
20. november 2010 - 17:24 #18
Arne, jeg kunne vel ikke lokke dig til, at hjælpe mig med få rettet scriptet til?

For i stedet for "\r\n", vil jeg gerne have den bare skriver Dat() og så selvfølgelig den tekst som skal sendes af sted.
Umiddelbart ville jeg tro, at #5 kunne. Men det spammer bare hele textboxen.
Avatar billede arne_v Ekspert
20. november 2010 - 19:51 #19
Du kan jo altdi lave en:

        public static string SplitLines(string s)
        {
            SplitLines(s, 200, "\r\n");
        }

så kan du kalde den med et argument.
Avatar billede GoofyDK Nybegynder
20. november 2010 - 20:03 #20
Jamen det jeg gerne vil have, det er når den skal lave det linje skift. Så skal den smide Dat() på i stedet for. Hvordan skal det fikses ind i dit script?
Avatar billede arne_v Ekspert
20. november 2010 - 23:59 #21
Nu er jeg forvirret.

Kan du give et eksemoel med:
* tekst box indhold før
* den streng du får
* tekst box indhold efter
Avatar billede GoofyDK Nybegynder
21. november 2010 - 09:35 #22
Hvis jeg skriver: "Hej Eksperten, dette er en test og god søndag."

Så udskriver den:

"Besked:  Hej Eksperten, dette
er en test og god
søndag."

Men jeg vil gerne have den skriver:

"Besked: Hej Eksperten, dette
"Besked: er en test og god
"Besked: søndag."

Så det vil sige, den gøre min Dat() igennem i stedet for "\r\n"

SplitLines(Hej Eksperten, dette er en test og god søndag);
og i den, så tager den selv 20 i længden og laver en ny linje med Dat(). Håber du forstår mig nu. :-)
Avatar billede GoofyDK Nybegynder
21. november 2010 - 18:02 #23
Fik jeg skærmt jer væk? :-(
Avatar billede arne_v Ekspert
21. november 2010 - 18:26 #24
text box med multiline = true

public static string SplitLines(string s)
        {
            SplitLines(s, 20, "\r\n");
        }

        public void Dat(string data)
        {
            string s = textBox1.Text + SplitLines("Besked: " + data) + "\r\n";
            textBox1.Text = s;
            textBox1.Select(textBox1.Text.Length, 0);
            textBox1.ScrollToCaret();
        }

og kald som:

Dat("Hej Eksperten, dette er en test og god søndag.");

bør virke.
Avatar billede arne_v Ekspert
21. november 2010 - 18:26 #25
Men hvis du vil have "Besked: " prefix på alle linier skal du bruge:

public static string SplitLines(string s)
        {
            SplitLines(s, 20, "\r\nBesked: ");
        }
Avatar billede GoofyDK Nybegynder
21. november 2010 - 18:36 #26
Jeg fik dette resultat:

Besked: Hej
Eksperten, dette er
en test og god
søndag.
Avatar billede GoofyDK Nybegynder
21. november 2010 - 18:58 #27
Havde ikke set #25 inden jeg svarede med #26.
Men hvis jeg gerne vil have, at den skal køre igennem Dat(), hvordan skal det så laves?
Avatar billede GoofyDK Nybegynder
21. november 2010 - 20:00 #28
Arne, kan du ikke svare mig, hvorfor denne spammer helt vildt i min tekst boks:

        public void spl(string data)
        {
            int max = 20;
            StringBuilder builder = new StringBuilder();
            List<string> outputs = new List<string>();
            for (int i = 0; i < data.Length; i++)
            {
                if (builder.Length + data.Length > max)
                {
                    outputs.Add(builder.ToString());
                    builder = new StringBuilder();
                }
                builder.Append(data);
            }
            //builder.Append(String.Format("Denner."));
            outputs.Add(builder.ToString());
            if (data.Length == 0)
            {
                Dat("Ingen tekst");
            }
            else
                foreach (string cur in outputs)
                {
                    Dat(cur);
                }
        }

public void Dat(string data)
        {
            textBox1.Text += "Besked: " + data + "\r\n";
            textBox1.Select(textBox1.Text.Length, 0);
            textBox1.ScrollToCaret();
        }

---

Besked:
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.
Besked: Hej Eksperten, dette er en test og god søndag.

spl(textBox5.Text);

Det er det resultat jeg får, hvordan får jeg det fikset?
Avatar billede arne_v Ekspert
22. november 2010 - 01:41 #29
Du skal kalde spl fra Dat og ikke omvendt.
Avatar billede GoofyDK Nybegynder
22. november 2010 - 16:07 #30
Ehm, så får jeg det jo ikke som jeg gerne vil have.

Vil gerne have, at jeg kan bruge Dat() ved hvert out post.
Avatar billede GoofyDK Nybegynder
22. november 2010 - 18:17 #31
Arne, jeg har prøvet det ene og det andet med den kode. Men jeg får ikke det resultat jeg gerne vil.

Kan du ikke tilrette min kode, så jeg får den ønskede effekt?
Avatar billede arne_v Ekspert
28. november 2010 - 04:07 #32
Følgende ser rimeligt ud her:

        public static string SplitLines(string s, int maxlen, string del)
        {
            StringBuilder res = new StringBuilder("");
            string[] word = s.Split(" ".ToCharArray());
            int ix = 0;
            string line = "";
            while(ix < word.Length)
            {
                if((line + 1 + word[ix]).Length > maxlen)
                {
                    line += del;
                    res.Append(line);
                    line = "";
                }
                if(line.Length > 0)
                {
                    line += " ";
                }
                line += word[ix];
                ix++;
            }
            if(line.Length > 0)
            {
                line += del;
                res.Append(line);
            }
            return res.ToString();
        }
        public static string SplitLines(string s)
        {
            return SplitLines(s, 20, "\r\nBesked: ");
        }
        public void Dat(string data)
        {
            string s = textBox1.Text + "Besked: " + SplitLines(data) + "\r\n";
            textBox1.Text = s;
            textBox1.Select(textBox1.Text.Length, 0);
            textBox1.ScrollToCaret();
        }
        void Button1Click(object sender, EventArgs e)
        {
            Dat("Hej Eksperten, dette er en test og god søndag.");
        }
Avatar billede GoofyDK Nybegynder
01. december 2010 - 19:57 #33
Jeg siger tak Arne, læg et svar. :-)
Avatar billede arne_v Ekspert
01. december 2010 - 20:16 #34
svar
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