c# Richtextbox, göra text bold

Permalänk

c# Richtextbox, göra text bold

Hej jag har problem med att göra delar av min text bold i en Richtextbox i C#.

Jag tänkte mig en liknande layout:

Förnamn : Kalle
Efternamn: Nilsson
(Där för och efternamnen ska vara tabade)

Problemet är att jag inte förstår mig på rtf kodningen.

Jag tycker denna kod borde vara rätt, men det blir en konstig symboler kring Efternamn:

EDIT:
Kod uppdaterad efter sAndens påpekande om ett fel.

richTextBox1.Rtf = @{\rtf1\ansi \b Förnamn:\b0 \t + P1.fnamn + " \n" + "\bEfternamn:\b0 \t" + P1.enamn +"}";

Tabningen går i värsta fall göras med blanksteg även om det ser lite fult ut.

Hela koden:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); Person P1 = new Person("Kalle", "Nilsson"); richTextBox1.Rtf = @{\rtf1\ansi \b Förnamn:\b0 \t + P1.fnamn + " \n" + "\bEfternamn:\b0 \t" + P1.enamn +"}"; } } class Person { private String Fnamn, Enamn; public Person(String fnamn, String enamn) { Fnamn = fnamn; Enamn = enamn; } public String fnamn { get { return Fnamn; } } public String enamn { get { return Enamn; } } } }

//Nils

Permalänk
Medlem

richTextBox1.Rtf =
@{\rtf1\ansi \b Förnamn:\b0 \t + P1.fnamn + " \n" +
"\bEfternamn:\b0 \t" + P1.enamn;

borde det inte rimligtvis vara en slut } i koden?

Jag kanske missuppfattade frågan grovt. Ber om ursäkt isf

richTextBox1.Rtf = @{\rtf1\ansi This is in \b bold\b0.};

Visa signatur

Samsung TFT 22" 2233RZ Svart 120HZ - 640GB Western Digital Black 64MB SATA III - Corsair 4GB (2x2048MB) 1333MHz XMS3-10600 - AMD Phenom2 X4 965 3,4GHz Black Edition - Gigabyte GeForce GTX 460 1GB OC - Fractal Design Define R3, Svart - Corsair TX 650W 80+ - Gigabyte GA-870A-UD3 - Cooler Master Hyper 212 Plus

Permalänk
Skrivet av sAnden:

richTextBox1.Rtf =
@{\rtf1\ansi \b Förnamn:\b0 \t + P1.fnamn + " \n" +
"\bEfternamn:\b0 \t" + P1.enamn;

borde det inte rimligtvis vara en slut } i koden?

Jag kanske missuppfattade frågan grovt. Ber om ursäkt isf

richTextBox1.Rtf = @{\rtf1\ansi This is in \b bold\b0.};

Självklart, den glömde jag då jag i all hast gjorde ett enkelt exempel. Men det fungerar inte ändå, samma fel kvarstår med konstiga tecken och att Efternamn ej är bold.

richTextBox1.Rtf = @{\rtf1\ansi \b Förnamn:\b0 \t + P1.fnamn + " \n" + "\bEfternamn:\b0 \t" + P1.enamn +"}";

Tackar dock för påpekandet av ett fel, då det kunde lösa problemet. Sånt här borde vara skitlätt, men jag har googlat utan hittat någon bra lösning.

//Nils

Permalänk
Medlem
Skrivet av Nisse-Arne:

Självklart, den glömde jag då jag i all hast gjorde ett enkelt exempel. Men det fungerar inte ändå, samma fel kvarstår med konstiga tecken och att Efternamn ej är bold.

richTextBox1.Rtf = @{\rtf1\ansi \b Förnamn:\b0 \t + P1.fnamn + " \n" + "\bEfternamn:\b0 \t" + P1.enamn +"}";

Tackar dock för påpekandet av ett fel, då det kunde lösa problemet. Sånt här borde vara skitlätt, men jag har googlat utan hittat någon bra lösning.

//Nils

Jag har aldrig kodat i C# men borde inte detta fungera (notera att jag ej har tillgång till Visual Studio just nu)
richTextBox1.Rtf = @{\rtf1\ansi \b Förnamn:\b0.}; + P1.fnamn;
richTextBox1.Rtf = @{\rtf1\ansi \b Efternamn:\b0.}; + P1.enamn;

Koden är säkert fel, men min poäng är att du delar upp i två richTextboxar. Det kanske failar på att du kör båda i samma?

edit

hoppsan, glömde skriva b0 istället för 0 ^^

Visa signatur

Samsung TFT 22" 2233RZ Svart 120HZ - 640GB Western Digital Black 64MB SATA III - Corsair 4GB (2x2048MB) 1333MHz XMS3-10600 - AMD Phenom2 X4 965 3,4GHz Black Edition - Gigabyte GeForce GTX 460 1GB OC - Fractal Design Define R3, Svart - Corsair TX 650W 80+ - Gigabyte GA-870A-UD3 - Cooler Master Hyper 212 Plus

Permalänk
Medlem

Dock tycker jag inte att

richTextBox1.Rtf = @{\rtf1\ansi \b Förnamn:\b0 \t + P1.fnamn + " \n" + "\bEfternamn:\b0 \t" + P1.enamn +"}";

ser rätt ut.

Du plussar efter P1.enamn, vad ska komma efter det?

Visa signatur

Samsung TFT 22" 2233RZ Svart 120HZ - 640GB Western Digital Black 64MB SATA III - Corsair 4GB (2x2048MB) 1333MHz XMS3-10600 - AMD Phenom2 X4 965 3,4GHz Black Edition - Gigabyte GeForce GTX 460 1GB OC - Fractal Design Define R3, Svart - Corsair TX 650W 80+ - Gigabyte GA-870A-UD3 - Cooler Master Hyper 212 Plus

Permalänk
Skrivet av sAnden:

Dock tycker jag inte att

richTextBox1.Rtf = @{\rtf1\ansi \b Förnamn:\b0 \t + P1.fnamn + " \n" + "\bEfternamn:\b0 \t" + P1.enamn +"}";

ser rätt ut.

Du plussar efter P1.enamn, vad ska komma efter det?

En nyrad. "\n" är en textsträng för detta i c++ och även RTF om jag har förstått det rätt, den verkar i alla fall att fungera.

Annars får jag tyvärr inte dina exempel ovanför att fungera, även efter omformatering till C#.

Men jag tackar så mycket för hjälpen!

Jag har läst någonstans att man använda sig av Selection och därefter använda de inbyggda funktionerna i C#, men jag får inte heller detta att fungera. En fråga mer för vana c# kodare.

Något liknande såhär från pascal.

rtb.SelectionStart = 0;
rtb.SelectionLength = rtb.Text.Length;
rtb.SelectionColor = Color.Blue;
rtb.SelectionFont = new Font("Courier New", 10, FontStyle.Regular);

changing font, size, color .... richtextbox | debugging

EDIT

Eller nu börjar jag få till det.

richTextBox1.Text = "hejsan"; richTextBox1.SelectionStart = 0; richTextBox1.SelectionLength = 2; richTextBox1.SelectionFont = new Font("Courier New", 10, FontStyle.Bold);

Bara kvar att avselektera och sedan så skulle detta helst göra osynligt. Dels av prestandaskäl.

EDIT2

Jag tror jag löste det, eller kringgick problemet.

richTextBox1.Text = "Förnamn: \t" + P1.fnamn +"\n" + "Efternamn: \t" + P1.enamn; richTextBox1.SelectionStart = 0; richTextBox1.SelectionLength = 8; richTextBox1.SelectionFont = new Font("Courier New", 10, FontStyle.Bold); richTextBox1.SelectionStart = 15; richTextBox1.SelectionLength = 12; richTextBox1.SelectionFont = new Font("Courier New", 10, FontStyle.Bold); richTextBox1.SelectionLength = 0;

Detta fungerar, frågan är dock om man kan göra det på ett effektivare sätt där inte datorn visar allt på skärmen. Nu är det i och för sig en kort text jag har, varvid det inte är något problem.

Jag tackar dock så mycket för hjälpen, om någon har något förbättringsförslag på hur man kan enkelt stänga av visningsfunktionen i richtextbox under bearbetning så vore det bra.

Permalänk

testa

richTextBox1.Rtf ="{\\rtf1\\ansi \\b Förnamn:\\b0 \t" + P1.fnamn + " \n" + "\\b Efternamn:\\b0 \t" + P1.enamn + "}";

Eftersom du använder en verbatim string för strängdefinitionen så "escape:ar" den också formatteringstecknena \b och \b0, och därför fungerar det inte.

Permalänk
Skrivet av @@mårten@@:

testa

richTextBox1.Rtf ="{\\rtf1\\ansi \\b Förnamn:\\b0 \t" + P1.fnamn + " \n" + "\\b Efternamn:\\b0 \t" + P1.enamn + "}";

Eftersom du använder en verbatim string för strängdefinitionen så "escape:ar" den också formatteringstecknena \b och \b0, och därför fungerar det inte.

Den där fungerar nästan, allt ser helt perfekt ut förutom att ny rad inte fungerar.

Denna lösningen om den fungerar är ju tusan så mycket bättre än det fula kringåendet som jag gjorde ovanför.. Jag får testa mer.

Jag tackar så mycket för hjälpen!

Permalänk

Sorry, tänkte inte på radbrytningen

Använd "\\line" istället för "\n" så ska det funka. Kan också läsa på Rich Text Format (RTF) Specification, version 1.6 om du vill göra ytterligare formattering. Speciellt avsnittet Character Text är nog intressant.

Permalänk
Skrivet av @@mårten@@:

Sorry, tänkte inte på radbrytningen

Använd "\\line" istället för "\n" så ska det funka. Kan också läsa på Rich Text Format (RTF) Specification, version 1.6 om du vill göra ytterligare formattering. Speciellt avsnittet Character Text är nog intressant.

Nu fungerar det helt perfekt! Jag tackar så hemsk mycket för hjälpen, detta gäller såklart även sAnden.

Denna lösningen är ju grymt mycket bättre än min fullösning. Sedan tackar för länktipsen, jag ska troligen göra mer formateringar sedan någon gång.

Permalänk
Hedersmedlem

Angående \n så rekommenderar jag att du genomgående använder Environment.NewLine istället, och även konsekvent ersätter andra gammaldags kontrolltecken med motsvarande resurser.

Visa signatur

Religion och vidskepelse är smittsamma psykiska sjukdomar, den biologiska motsvarigheten till datorvirus.
"-Pappa, pappa, idag firade vi födelsedag och hela dagis fick gå på McDonalds. - Vems födelsedag då? - En farbror som hette Lenin."