Autor Beitrag
Scofield2011
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Windows XP, Windows 7, Windows 8
C#, VBA, VB
BeitragVerfasst: Fr 16.12.11 18:59 
Hallo,

ich habe eine Frage zu TreeViews:

Ich möchte mit folgendem Code abhängig davon ob der text des Nodes fettgedruckt ist einen bestimmten Button deaktivieren bzw.aktivieren.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
private void TestTree_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (TestTree.SelectedNode.NodeFont.Bold)
            {
                ...
            }
            else
            {
               ...
            }
        }


Leider bekomme ich immer eine NullPointer Exception.

Ist denn in TestTree.SelectedNode.NodeFont.Bold nicht hinterlegt ob der Text des jeweiligen Knotens fett (true) oder nicht fett (false) dargestellt ist?

Wie kann eigentlich eine bool Variable null sein?

Ich hoffe jemand kann mir hier weiter helften und bedanke mich schon einmal im Voraus.

CU

Scofield2011
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: Fr 16.12.11 19:46 
Hallo,

ich denke mal eher, daß TestTree.SelectedNode bzw. NodeFont null ist (aber das findest du mit dem Debugger ja sehr schnell raus ;-)).
Siehe insbesondere den Hinweis zu NodeFont in der MSDN:
Zitat:
Wenn null (Nothing in Visual Basic) festgelegt ist, ist der verwendete Font der Font-Eigenschaftenwert des TreeView-Steuerelements, dem dieser Knoten zugeordnet ist.
Scofield2011 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 55

Windows XP, Windows 7, Windows 8
C#, VBA, VB
BeitragVerfasst: Fr 16.12.11 20:30 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,

ich denke mal eher, daß TestTree.SelectedNode bzw. NodeFont null ist


Du hast recht NodeFont ist null. Jetzt stellt sich mir allerdings die Frage wieso?

Der SelectedNode muss doch irgendwelche Font Eigenschaften haben. Der SelectedNode ist übrigens nicht null, was ich als ein Node wurde angewählt interpretiere. Und da er ja auch dargestellt wird, müssten da doch auch Font Eigenschaften verfügbar sein.
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: Fr 16.12.11 21:13 
Hallo,

im Zitat steht doch die Auflösung.
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
Font font;
if (node.NodeFont == null)
   font = node.TreeView.Font;
else
   font = node.NodeFont;

nur als Anschauung so hingeschrieben - ich selber würde es per ?? Operator lösen:
ausblenden C#-Quelltext
1:
Font font = node.Font ?? node.TreeView.Font;					


Anhand der 'null' kann man also sehen, ob der Node einen eigenständigen Font hat oder aber der TreeView.Font benutzt wird. Ich denke dies wird zur Schonung von Ressourcen so gemacht, damit nicht aberdutzende von Referenzen auf den Font gesetzt werden (TreeView ist ja nur eine Kapselung des WinAPI-Controls - bzw. CommCtrls - und in C werden eben Nullzeiger dafür benutzt).