11. maj 2009 - 13:09Der er
21 kommentarer og 1 løsning
Hjælp til at indlæse en gemt Forecolor fra en tekstfil.txt.
Jeg har et C# program som kan gemme programmets indstillinger fra brugeren ved at trykke på en knap(save layout). Det bliver gemt i en tekstfil. Der bliver blandt andet gemt en forgrundsfarve på den tekst man skriver i sine tekstbokse. Hvordan indlæses sådan en forgrundsfarve igen, sådan at teksten i tekstboksene f.eks bliver grøn hvis det var grøn forgrundsfarve som der var blevet gemt i filen?Compileren siger at inputstrengen ikke er i det rigtige format. se også tekstfil nedenfor.
FileStream file = new FileStream(cmOpen.FileName, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(cmOpen.FileName); int i = 0; if (cmOpen.FileName != "") { string st; //while ((st = sr.ReadLine()) != null) for (i = 0; i < textbox.Length;i++) { st = sr.ReadLine(); position = st.IndexOf('='); if (position > 0) { st = st.Substring(position + 1); } textbox[i].Text = st; textbox[i].ForeColor = System.Drawing.ColorTranslator.FromOle((Int32.Parse(st))); } } sr.Close(); file.Close(); }
Sådan bliver det lagt ind i filen:
0 = kim Microsoft Sans Serif 8,25 False False 4227327
Den nederste linie er en farvekode på en forgrundsfarve.
Jeg har 64 tekstbokse som genereres i et panel ved runtime. Ved at indtaste tekst i hver af tekstboksene som man nu synes og man kan vælge forskellige fonte og forecolor på indtastet tekst i tekstboksene. Når man er færdig gemmer man det i en tekstfil. Den gemmer teksten, fonten, forecolor og size in points for hver af tekstboksene. Når jeg så en anden dag vil hente disse indstillinger frem igen har jeg en anden knap som hedder load layout. Den indlæser min tekstfil. Der kunne jeg godt tænke mig at den kunne læse den gemte forgrundsfarve ind i programmet igen og at teksten i tekstboksen f.eks bliver grøn når tekstfilen indlæses. Kan jeg få hjælp til det?
tak for svaret det vil jeg prøve. men hvordan får jeg programmet til at indlæse fontnavne og font sizeinpoints og font.Bold og font.Italic fra den samme tekstfil udfra det kode jeg har postet? Problemet er at alt data læses fra min string st. Så når jeg ønsker at indlæse den font jeg havde valgt så får jeg et problem med typerne.
textbox[i].Font = st; og textbox[i].Font.Sizeinpoints = st;
Det med fonten virker men resten det med bold og italic og sizeinpoints virker ikke da det er readonly. Det vil sige at man ikke kan sige boolean.Parse(st); man kan ikke assigne noget da det er readonly. Hvad er det jeg gør forkert?
textbox[i].Font.Bold = Boolean.Parse(st); st = sr.ReadLine(); textbox[i].Font.Italic = Boolean.Parse(st); st = sr.ReadLine(); textbox[i].Font.SizeInPoints = Int32.Parse(st);
Det er garanteret meget simpelt men den FontStyle variabel når man har erklæret sådan en hvordan kan den variabel så skifte om hvis jeg nu har valgt Bold, Italic eller Normal.
Det er ikke helt simpelt, da det jo også kan være en kombination:
Hvis Fontstyle-var hedder FS, og Bold-var hedder BO, og Italic-var hedder IT:
If BO = True And IT = False Then FS = FontStyle.Bold If BO = True And IT = True Then FS = FontStyle.Bold Or FontStyle.Italic If BO = False And IT = True Then FS = FontStyle.Italic If BO = False And IT = False Then FS = FontStyle.Regular
Jeg er ikke helt sikker på at jeg forstår hvad du vil og jeg arbejder i C# men der er stadig nogle irriterende fejl som jeg ikke kan komme videre med. prøv at se her: compileren mener at if-sætninger er forkerte. kan ikke se hvad der er galt.
FontStyle FS = new FontStyle(); FontStyle BO = new FontStyle(); FontStyle IT = new FontStyle();
BO = FontStyle.Bold; IT = FontStyle.Italic;
textbox[i].Text = st; st = sr.ReadLine(); if (BO == true && IT == false) { FS = FontStyle.Bold; textbox[i].Font = new Font(st, Font.SizeInPoints,FS, GraphicsUnit.Point); } st = sr.ReadLine(); if (BO == true && IT == true) { FS = FontStyle.Bold; textbox[i].Font = new Font(st, Font.SizeInPoints, FS, GraphicsUnit.Point); FS = FontStyle.Italic; textbox[i].Font = new Font(st, Font.SizeInPoints, FS, GraphicsUnit.Point); }
if (BO == false && IT == true) { FS = FontStyle.Italic; textbox[i].Font = new Font(st, Font.SizeInPoints, FS, GraphicsUnit.Point);
}
if (BO == false && IT == false) { FS = FontStyle.Regular; textbox[i].Font = new Font(st, Font.SizeInPoints, FS, GraphicsUnit.Point); }
Ja, jeg beklager med sproget, men jeg er VB NET mand, og kender ikke den korrekte C# syntaks.
Mht Bold og Italic variablerne: Det er for såvidt ligegyldig, hvilket format de er i (du kunne faktisk bruge strengene direkte fra textfilen). De skal jo blot bruges til at sætte FontStyle-variablen. Men når du bruger dem i If-sætningerne med False og True, så skal de jo være Boolean. Når compileren brokker sig over dine If-sætninger, er det jo fordi du prøver at teste om en FontStyle er True (eller False). Den går ikke.
Hej, det du kom på igår med de if - sætninger virker til at være den rigtige måde at gøre det på. Jeg kan godt læse og forstå VB.NET når det kun drejer sig om det her med mit C# problem. Så jeg ville spørge dig hvordan skulle man lave det med at læse strengen hvor der står "False" eller "True" fra filen for det lyder som en smart ide? I min fil kommer først
0=Text Microsoft Sans Serif True False 65280
Hvordan får Fontstylevariablen til at reagere på strengen True? og i if - sætningerne skal man da sige noget i retning af if (Font.Bold == True && Font.Italic == False) osv. Fordi Fontstyle kan ikke være en streng så jeg er nysgerrig efter at vide hvordan du ville gøre det.
Jeg har gjort som du sagde med Fontstyle og if-sætningerne og nu virker det pludselig. nu kan den skifte til bold og italic og regular. Så jeg siger mange tak for svaret. Nu mangler den bare også kunne ændre fonten og det burde den gøre men det gør den ikke. Koden ser sådan ud:
FontStyle FS = new FontStyle(); textbox[i].Text = st; st = sr.ReadLine(); textbox[i].Font = new Font(st, 8, FontStyle.Regular, GraphicsUnit.Point); st = sr.ReadLine(); bool BO = Boolean.Parse(st); st = sr.ReadLine(); bool IT = Boolean.Parse(st); if ((BO == true && IT == false)) { FS = FontStyle.Bold; textbox[i].Font = new Font(st, Font.SizeInPoints,FS, GraphicsUnit.Point);
} if (BO == true && IT == true) { FS = FontStyle.Bold | FontStyle.Italic; textbox[i].Font = new Font(st, Font.SizeInPoints, FS, GraphicsUnit.Point); } if (BO == false && IT == true) { FS = FontStyle.Italic; textbox[i].Font = new Font(st, Font.SizeInPoints,FS, GraphicsUnit.Point); } if (BO == false && IT == false) { FS = FontStyle.Regular; textbox[i].Font = new Font(st, Font.SizeInPoints, FS, GraphicsUnit.Point); }
Fejlen opstår når du prøver at lave en ny Font med st, men st indeholder ikke Font-navnet længere, men derimod True eller False.
Lav en ekstra variabel specielt til Fontnavnet, og sæt den når du læser første linie ind.
Du behøver heller ikke sætte fonten efter hver test på FontStyle. Slet alle textbox[i].Font = new Font(st, Font.SizeInPoints, FS, GraphicsUnit.Point); -linierne undtagen den sidste, og erstat st med fontnavn-variablen i den.
ok jeg har lavet det om som du siger. Men hvordan laver du font navn variablen. den eneste måde jeg kender er font f = new font(st, font.Sizeinpoints,FontStyle.Regular,GraphicsUnit.Point) men det er vel ikke sådan du mener man laver en fontnavnvariabel?
Jeg har fået det til at virke nu og du havde ret i at man skulle lave en font navn variabel og så sætte den og så fjerne alle de linier på nær den sidste. nu kan jeg skifte font, og kursiv og fed og kursiv og fed. nu kan du se i min kode at jeg hver gang tildeler de forskellige data fra filen til mit tekstboksarray. Jeg oplever at programmet flakser(blinker) meget hurtigt i noget tid før ændringen er sket. Det ser ikke pænt ud. Skal der noget refresh til eller noget andet til så ændringen sker med det samme?
Men ihvertfald vil jeg gerne sige tak for alt hjælp og hvis du også har lyst til at hjælpe mig med at fjerne det der blinkeri eller at programmet blinker lige før data hentes ind i programmet. Så vil jeg vente til i morgen.
-Godt du fik det andet til at virke. Tillader mig at lave dette indlæg som et svar.
Synes godt om
Ny brugerNybegynder
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.