Autor |
Beitrag |
Chiyoko
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Do 20.05.10 16:06
Huhu,
ich hab mir jetzt eine config gebastelt.
Diese sieht wie folgt aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| private void config_schreiben() { XmlTextWriter CFGWriter = new XmlTextWriter(".\\config.xml", null);
CFGWriter.WriteStartDocument(); CFGWriter.Formatting = Formatting.Indented; CFGWriter.WriteComment("UhrConfiguration");
CFGWriter.WriteStartElement("Configuration");
CFGWriter.WriteStartElement("LabeldateLeft"); CFGWriter.WriteValue(Label_date.Left); CFGWriter.WriteEndElement(); CFGWriter.WriteStartElement("LabeldateTop"); CFGWriter.WriteValue(Label_date.Top); CFGWriter.WriteEndElement(); CFGWriter.Close(); }
private void config_einlesen() { if (File.Exists(".\\config.xml")) { XmlTextReader CFGReader = new XmlTextReader(".\\config.xml"); System.Drawing.ColorConverter convertColor = new ColorConverter(); System.Drawing.ImageConverter convertBitmap = new ImageConverter();
CFGReader.ReadStartElement("Configuration"); CFGReader.ReadStartElement("LabeldateLeft"); Label_date.Left = Convert.ToInt32(CFGReader.ReadString()); CFGReader.ReadEndElement(); CFGReader.ReadStartElement("LabeldateTop"); Label_date.Top = Convert.ToInt32(CFGReader.ReadString()); CFGReader.ReadEndElement();
CFGReader.Close(); } } |
Dabei habe ich jetzt mal nur diese 2 Werte als beispiel genommen.
Mein problem ist jetzt....ueber:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| this.openFileDialog = new OpenFileDialog(); this.openFileDialog.Title = "open Picture"; this.openFileDialog.Multiselect = false; this.openFileDialog.CheckFileExists = true; this.openFileDialog.SupportMultiDottedExtensions = true; this.openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); this.openFileDialog.FilterIndex = 5; this.openFileDialog.FileName = ""; if (this.openFileDialog.ShowDialog() == DialogResult.OK) { string fileName = this.openFileDialog.FileName; try { this.BackgroundImage = Bitmap.FromFile(fileName); this.openFileDialog.InitialDirectory = System.IO.Path.GetDirectoryName(fileName); backroundbildFile = fileName; } catch (Exception ex) { string messageText = String.Format( "File '{0}'could not be loaded.:{1}{2}", fileName, Environment.NewLine, ex.Message); MessageBox.Show(this, messageText, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } } |
kann ich ein backround picture einlesen.Nur wie kann ich den Pfad per xml auslesen / einlesen,
wenn die methode private ist?
ich hab schon ueber eine variable versucht : backroundbildFile = fileName;
Hat jemand ein tip?Danke .
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Fr 21.05.10 10:02
Ich formulier meine Frage mal um:
Nach etlichen Versuchen klappt es immernoch nicht.Ueber eine globale Variable kann ich zwar den Pfad uebergeben aber ich kann sie nicht convertieren bzw. ich mache etwas dabei falsch.
Wobei man natuerlich die Methode config_einlesen()erstmal ausser acht lassen kann.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| internal string backroundbildFile; string fileName = this.openFileDialog.FileName; this.BackgroundImage = Bitmap.FromFile(fileName); backroundbildFile = fileName;
private void config_schreiben() { XmlTextWriter CFGWriter = new XmlTextWriter("config.xml", null);
CFGWriter.WriteStartDocument(); CFGWriter.Formatting = Formatting.Indented; CFGWriter.WriteStartElement("backroundimg"); CFGWriter.WriteValue(backroundbildFile); CFGWriter.WriteEndElement(); CFGWriter.Close(); }
private void config_einlesen() { if (File.Exists(".\\config.xml")) { XmlTextReader CFGReader = new XmlTextReader(".\\config.xml"); System.Drawing.ImageConverter convertBitmap = new ImageConverter();
try { CFGReader.ReadStartElement("Backroundpic_loc"); this.BackgroundImage = (Image)convertBitmap.ConvertFromString(); CFGReader.ReadEndElement(); } catch (Exception ex) { MessageBox.Show(ex.Message); } CFGReader.Close(); } else {} } |
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Fr 21.05.10 10:18
Was für einen Fehler hast du den?
Mal abgesehen davon, ich verwende für die Speicherung meiner Einstellungen einfach den XmlSerializer. Meistens reicht der auch locker aus. 0 Aufwand:
Bsp:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| public class Settings { public int UpdateInterval { get; set; }
public string Sender { get; set; }
public string Subject { get; set; }
public string Text { get; set; }
public MailSettings MailSettings { get; set; }
public static Settings Load(string filename) { if (!File.Exists(filename)) { return new Settings(); }
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
using (FileStream fs = File.OpenRead(filename)) { return (Settings)serializer.Deserialize(fs); } }
public void Save(string filename) { if (File.Exists(filename)) { File.Delete(filename); }
XmlSerializer serializer = new XmlSerializer(typeof(Settings));
using (FileStream fs = File.OpenWrite(filename)) { serializer.Serialize(fs, this); } } |
Gruß
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Fr 21.05.10 11:06
Naja, das ist ja das Problem.
Nehme ich die Sektion fuer das backroundimage weg, dann
schreibt der mir eine Xml config, wo alle Daten so funktionieren wie sie sollen und sich auch auslesen lassen
( in dem Fall - x,y Werte der 2 labels, die Font farben, die ich convertiere und topmost)
XML-Daten 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| <?xml version="1.0"?>
<Configuration> <LabeldateLeft>3</LabeldateLeft> <LabeldateTop>25</LabeldateTop> <LabeltimeLeft>53</LabeltimeLeft> <LabeltimeTop>104</LabeltimeTop> <Label_date_color>Black</Label_date_color> <Label_time_color>Black</Label_time_color> <TopMost>false</TopMost> </Configuration> |
, ...lass ich diese
Sektion drin, dann schreibt sich die Xml datei leer.
Fehlermeldung: keine...(jedenfalls nicht beim einlesen)...
aber es muesste doch wenigstens der Path string geschrieben werden, denn
das uebergeben an eine messageBox funkioniert auch.
Und btw, danke fuer den Tip mit der Klasse, aber ich wuerd vorher gerne meine
Variante umsetzen.Sonst aergert mich das^^
Koennte es vielleicht sein, das der String falsch gesetzt wird?
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Fr 21.05.10 13:28
Chiyoko hat folgendes geschrieben : | Und btw, danke fuer den Tip mit der Klasse, aber ich wuerd vorher gerne meine
Variante umsetzen |
Aber bitte, bitte nicht mit dem XmlTextWriter, da ist man ja rückwärts schneller am Ziel  . Schau dir bitte mal XElement an, so wird heutzutage XML gehandhabt.
Chiyoko hat folgendes geschrieben : | Koennte es vielleicht sein, das der String falsch gesetzt wird? |
Hast du schon einmal einen Breakpoint in die Speicher-Methode gesetzt und geschaut, was für ein String ankommt?
_________________ >λ=
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Fr 21.05.10 13:47
Ja XElement hatten wir ja schon zu genuege:D....
Ich habe bisher allerdings nie Knoten geschrieben, darum der versuch mit Textwriter...
Was den breakpoint angeht: nein, aber mach ich jetzt.
ergebnis:
[url= www.imgbox.de/show/img/pY9TmAvXOt.jpg] [/URL]
So ich muss erstmal los,..
aber du meinst das so ungefaehr oder?
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| private void config_schreiben() { try { XDocument docConfig = new XDocument( new XComment("UhrConfiguration"), new XElement("Configuration", new XElement("LabeldateLeft", Label_date.Left), new XElement("LabeldateTop", Label_date.Top), new XElement("LabeltimeLeft", Label_time.Left), new XElement("LabeltimeTop", Label_time.Top), new XElement("Label_date_color", Label_date.ForeColor.Name), new XElement("Label_time_color", Label_time.ForeColor.Name), new XElement("TopMost", this.TopMost), new XElement("backroundimg", backroundbildFile) ) ); } catch (Exception ex) { MessageBox.Show(ex.Message); } } |
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Sa 22.05.10 12:15
Ich habs raus-.-...das liegt am encoding.
d.h.: Da ich chinesisch auf meinem Rechner habe, kann es in dem
Utf8 format nicht funktionieren, da diese zeichen nicht exestieren.
Nun hab ich das mal getestet:
C#-Quelltext 1: 2: 3:
| internal string backroundbildFile = "C:\tester\test\test.jpg";
new XElement("backroundimg", backroundbildFile), |
raus kam das hier:
XML-Daten 1:
| <backroundimg>C: ester est est.jpg</backroundimg> |
EDIT: hier nochmal beide Methoden.
Funktioniert ausgezeichnet und ist uebersichtlicher.Danke nochmal fuer den Rat.
Das einzige was mir jetzt fehlt:
Wie kann ich den char "\" in das entsprechnde format umwandeln?
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Encoding ascii = Encoding.ASCII; Encoding unicode = Encoding.Unicode; byte[] unicodeBytes = unicode.GetBytes(backroundbildFile); byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);
char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)]; ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0); string asciiString = new string(asciiChars); |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| private void config_einlesen() { if (File.Exists(".\\config.xml")) { XDocument xDocument = XDocument.Load("config.xml"); System.Drawing.ColorConverter convertColor = new ColorConverter(); System.Drawing.ImageConverter convertBitmap = new ImageConverter();
var xdocselect = xDocument.XPathSelectElements("Configuration");
foreach (var Xselectel in xdocselect) { Label_date.Left = Convert.ToInt32(Xselectel.Element("LabeldateLeft").Value); Label_date.Top = Convert.ToInt32(Xselectel.Element("LabeldateTop").Value); Label_time.Top = Convert.ToInt32(Xselectel.Element("LabeltimeLeft").Value); Label_time.Top = Convert.ToInt32(Xselectel.Element("LabeltimeTop").Value); Label_date.ForeColor = (Color)convertColor.ConvertFromString(Xselectel.Element("Label_date_color").Value); Label_time.ForeColor = (Color)convertColor.ConvertFromString(Xselectel.Element("Label_time_color").Value); this.TopMost = Convert.ToBoolean(Xselectel.Element("TopMost").Value); } } else { } } private void config_schreiben() { try { XDocument docConfig = new XDocument( new XComment("UhrConfiguration"), new XElement("Configuration", new XElement("LabeldateLeft", Label_date.Left), new XElement("LabeldateTop", Label_date.Top), new XElement("LabeltimeLeft", Label_time.Left), new XElement("LabeltimeTop", Label_time.Top), new XElement("Label_date_color", Label_date.ForeColor.ToArgb()), new XElement("Label_time_color", Label_time.ForeColor.ToArgb()), new XElement("TopMost", this.TopMost) ) ); docConfig.Save("config.xml", SaveOptions.None); } catch (Exception ex) { MessageBox.Show(ex.Message); } } |
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 22.05.10 14:31
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Sa 22.05.10 15:27
Also....ich hab mich wohl missverstaendlich ausgedrueckt:D
Ich habe folgende Sprachen installiert:
- chinesisch
- englisch
- deutsch
Und das wird in Texteditoren automatisch uebernommen.
Normalerweise kann ich ja die Sprache umstellen, aber ich habe einen Haken bei:
1) unicode Vr China
2) Erweiterte Textdienste fuer komplexe Sprachen aktiv
Diese Optionen brauche ich aber dringendst...wie machen die Leute das im Osten?Da muss das ja auch i-wie mit dem Format funktionieren.
Zitat: |
Wozu Unicode erfunden wurde, ist dir bewusst?
|
Ich schaetze....ja?^^
Zitat: |
Du hast getestet, dass "\t" in C# als Tabulator interpretiert wird, was soll das jetzt mit Encoding zu tun haben?
|
Ja, d.h. ich brauche "@" davor aber das ging nicht(oder wie soll man sonst noch eine string varibale mit "@" verbinden?)....und genau darum nahm ich an, es liegt an meiner Sprachumstellung im System.Viele Chars werden im chinesischen anders gedeutet.
Zitat: |
Was heißt das genau, der zweite Code funktioniert? Dann passt es ja . Oder nur in Verbindung mit dem ersten?
|
Nur XDocument, also das was du mir geraten hast.Der vollstaendigkeithalber habe ich beide Methoden gepostet.Dem ein oder anderen wird es denk ich mal helfen.
Um das ganze zu verkuerzen:
Wie verbinde ich den eine string variable, in der der Pfad von openfiledialog uebergeben wurde, mit "@"? .... "@"+ variable
funktioniert nicht..
-----------------------
EDIT:
Neuer Versuch:
C#-Quelltext 1: 2: 3: 4: 5:
| backroundbildFile.Replace("\\", "\\\\"); string backroundString = backroundbildFile.Replace("\\", "\\\\");
MessageBox.Show(backroundString); |
Das geht,...setz ich aber den string "backroundString" ins Xdocument, geht es nicht....
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 22.05.10 18:10
Chiyoko hat folgendes geschrieben : | Wie verbinde ich den eine string variable, in der der Pfad von openfiledialog uebergeben wurde, mit "@"? ...."@"+ variable
funktioniert nicht. |
Da hast du etwas falsch verstanden. Ersetzungen wie \t führt C# natürlich nur bei String-Literalen durch, also Strings, die du direkt im Quelltext mit Anführungszeichen einfügst. Den Pfad eines Dialogs musst du direkt in ein XElement übernehmen können, ohne Ersetzungen oder Encoding-Probleme.
_________________ >λ=
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Sa 22.05.10 18:22
Das hab ich auch angenommen, aber leider funktioniert es nicht.
Die xml datei bleibt leer.
um alles auszuschliessen werde ich nacher wohl oder uebel den Unicode umstellen und alles was damit zu tun hat entfernen.
Wenn es dann immer noch nicht geht...dann weis ich auch nicht.
Aber selbst wenn es geht, kann das keine Loesung sein.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 22.05.10 18:28
Und ich glaube dir leider immer noch nicht, dass durch ein Encoding-Problem eine Datei einfach leer bleibt  . Erst, wenn ich es mit eigenen Augen sehe  .
_________________ >λ=
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Sa 22.05.10 20:54
Ok, was haelst du davon, das ich dir das projekt einfach mal per pm schicke und du schaust es dir an?
(du brauchst theoretisch nur noch kompilieren)
Ansonsten mach ich gleich ein Bild.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Sa 22.05.10 23:37
Mir wäre es lieber gewesen, dass du das Programm hier im Thread anhängst, damit auch andere miträtseln können  . Aber ich kann dazu sowieso nur sagen: Funktioniert bei mir, der ausgewählte Pfad landet in der XML...
Was mir aber an deinem Code, den du auch schon hier gepostet hast, auffällt: Du arbeitest mit relativen Pfaden, wird die XML-Datei vielleicht an einem Ort gespeichert, den du gar nicht erwartest? Benutze unbedingt absolute Pfade über Application.StartupPath und Path.Combine.
Übrigens: Die Settings-Dateien von VS übernehmen schon das Serialisieren in XML, und zwar an den richtigen Ort (%APPDATA%).
_________________ >λ=
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: Sa 22.05.10 23:47
Das find ich jetzt aber komisch...
Ja ich mach es gerne public, wenn es komplett ist.
Diese Art von Pfaden verwende ich jetzt nur zum testen.
In allen anderen Projekten verwende ich standart:
C#-Quelltext 1:
| pictureBox1.ImageLocation = Path.Combine(Application.StartupPath, @"Bilder\crabs.jpg"); |
Ansonsten danke fuer letzteren Tip.
Aber wie loese ich nun mein Problem?...
Es muss ja anscheind an meinem rechner /einstellungen liegen.
Jetzt fragt sich nur welche, ohne das es in Raetselraten ausartet...
Mit Utf-32 gehts:D
Aber es sieht dementsprechend aus:p
[url= www.imgbox.de/show/img/LUfPbSiu8H.jpg] [/URL]
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: So 23.05.10 12:33
Wuhuuuuuuuuuuuuuuuuuuuuu:D
Ich hab es raus.
XML-Daten 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| <?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Configuration> <LabeldateLeft>3</LabeldateLeft> <LabeldateTop>25</LabeldateTop> <LabeltimeLeft>53</LabeltimeLeft> <LabeltimeTop>104</LabeltimeTop> <Label_date_color>-16777216</Label_date_color> <Label_time_color>-16777216</Label_time_color> <backroundimg>C:\Dokumente und Einstellungen\Nyoko\Eigene Dateien\Eigene Bilder\36418-yunnan_gms_FVA_volksrepublik_china_NUR_MIT_TEXT.jpg</backroundimg> <TopMost>false</TopMost> </Configuration> |
Loesung:
C#-Quelltext 1:
| using System.Text.RegularExpressions; |
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 23.05.10 12:44
Jetzt lass mich doch nicht so hängen, die using-Direktive allein wird's wohl kaum gewesen sein  .
_________________ >λ=
|
|
Chiyoko 
      
Beiträge: 298
Erhaltene Danke: 8
Win 98, Win Xp, Win 10
C# / C (VS 2019)
|
Verfasst: So 23.05.10 13:48
EDIT: geschafft;)
Ich hab einfach 2 variable gesetzt, die dann einerseits den alten pfad kopieren und andererseits 2 configs zur auswahl stellen.Wenn true, dann erstelle config normal neu und wenn false, dann verwende alten Pfad.
Der Sourcecode:
rapidshare.com/files/390799242/Uhr.rar
|
|
|