Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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:

ausblenden 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:
ausblenden 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);


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 12.03.16 14:34 
Zitat:
ausblenden C#-Quelltext
1:
f.Font1 = new Font("- - -"11.0f);					


Wenn du keinen Font hast setzt doch Font1 einfach auf null?
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Sa 12.03.16 16:07 
Das ist dann offensichtlich Code der nichts mit dem zu tun hat denn du hier zeigst.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 12.03.16 17:17 
user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
Laden:
ausblenden 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:
ausblenden C#-Quelltext
1:
this.button1.Text = toolbox.Font1?.Name; // beachte den ?.-Operator					


Ansonsten einfach selber auf Null prüfen:
ausblenden C#-Quelltext
1:
this.button1.Text = (toolbox.Font1 != null)? toolbox.Font1.Name : "---";					


Diese Grundlagen solltest du aber langsam beherrschen.

Edit: Da user profile iconChristian S. mir diese Woche diesen eleganten Code gezeigt hat, geht auch (mit C#6) folgendes
ausblenden C#-Quelltext
1:
this.button1.Text = toolbox.Font1?.Name ?? "---";					
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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