Autor |
Beitrag |
Csharp-programmierer
      
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Sa 12.03.16 13:34
Hallo ihr Experten.
Ich habe eine Form mit 5 Buttons, die alle dem selben Ereignis unterliegen. In diesem Ereignis wird ein FontDialog aufgerufen und der Button, der gedrückt wurde, bekommt als Text die ausgewählte Schriftart:
C#-Quelltext 1: 2: 3: 4: 5:
| if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Button b = sender as Button; b.Text = fontDialog1.Font.Name.ToString(); } |
Gespeichert wird das ganze so:
C#-Quelltext 1: 2: 3: 4:
| if (this.button21.Text != "") f.Font1 = new Font(this.button21.Text, 11.0f); else f.Font1 = new Font("- - -", 11.0f); |
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| [XmlIgnore] public Font Font1 { get; set; } [XmlElement("Font1")] public string _font1 { get { if (Font1 == null) return null;
var converter = TypeDescriptor.GetConverter(typeof(Font)); return converter.ConvertToString(Font1); } set { var converter = TypeDescriptor.GetConverter(typeof(Font)); Font1 = (Font)converter.ConvertFromString(value); } } |
Das klappt. Wenn aber ein Button keinen Text hat, wird Microsoft Sans Serif als Schriftart angezeigt (wahrscheinlich wegen - - -). Aber wie kann ich es machen, dass der leere Button beim Laden leer bleibt?
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 12.03.16 14:34
Zitat: | C#-Quelltext 1:
| f.Font1 = new Font("- - -", 11.0f); | |
Wenn du keinen Font hast setzt doch Font1 einfach auf null?
|
|
Csharp-programmierer 
      
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Sa 12.03.16 14:51
Das habe ich versuche. Doch beim Laden kommt dann der Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Laden:
C#-Quelltext 1:
| this.button1.Text = toolbox.Font1.Name; |
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 12.03.16 15:04
Zitat: | Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt |
Das "wo" sollte dir helfen das "warum" zu bestimmen.
|
|
Csharp-programmierer 
      
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Sa 12.03.16 15:12
Das verstehe ich jetzt nicht. Oder soll ich das catch { } leer lassenP
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 12.03.16 15:19
Zitat: | Das verstehe ich jetzt nicht. Oder soll ich das catch { } leer lassenP |
Das verstehe wiederum ich nicht  Was für ein catch?
Wenn du eine Fehlermeldung bekommst bekommst du auch gesagt wo die aufgetreten ist. Erst recht wenn dir das beim debuggen passiert. Wenn du dir die konkrete Codestelle dann ansiehst sollte sich klären lassen warum die Fehlermeldung auftritt.
|
|
Csharp-programmierer 
      
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Sa 12.03.16 15:22
Der Code kommt mir an der Stelle um die Ohren geflogen, wo der Button den Text der Font annehmen soll, der Button beim Speichern aber leer war 
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 12.03.16 16:07
Das ist dann offensichtlich Code der nichts mit dem zu tun hat denn du hier zeigst.
|
|
Th69
      

Beiträge: 4798
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Sa 12.03.16 17:17
Csharp-programmierer hat folgendes geschrieben : | Laden:
C#-Quelltext 1:
| this.button1.Text = toolbox.Font1.Name; | |
Ist doch logisch, daß dann eine NullReferenceException kommt, wenn Font1 null ist (denn ein nicht vorhandenes Objekt hat keinen Namen...).
Wenn du schon C#6 (d.h. VS 2015) benutzt, dann kannst du z.B. folgendes schreiben:
C#-Quelltext 1:
| this.button1.Text = toolbox.Font1?.Name; |
Ansonsten einfach selber auf Null prüfen:
C#-Quelltext 1:
| this.button1.Text = (toolbox.Font1 != null)? toolbox.Font1.Name : "---"; |
Diese Grundlagen solltest du aber langsam beherrschen.
Edit: Da Christian S. mir diese Woche diesen eleganten Code gezeigt hat, geht auch (mit C#6) folgendes
C#-Quelltext 1:
| this.button1.Text = toolbox.Font1?.Name ?? "---"; |
|
|
Csharp-programmierer 
      
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Sa 12.03.16 23:50
Vielen Dank. Jetzt funktioniert es 
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|