Hallo zusammen,
ich möchte meinen TreeView (System.Windows.Forms.TreeView) so darstellen lassen, wie er in Win7 aussieht.
Ich habe dazu auch ein Beispiel gefunden, das auf unzähligen Seiten immer wieder erwähnt wird und in meiner kleinen Testanwendung auch wirklich funktioniert.
Hier der Code:
[highlight=vb.net]
Imports System.Runtime.InteropServices
Public Class Form1
Public Sub New()
Me.Font = System.Drawing.SystemFonts.IconTitleFont
InitializeComponent()
SetWindowTheme(treeView1.Handle, "explorer", Nothing)
'SetWindowTheme(listView1.Handle, "explorer", Nothing)
Me.treeView1.HotTracking = True
Me.TreeView1.FullRowSelect = True
End Sub
<DllImport("uxtheme.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)> _
Private Shared Function SetWindowTheme(ByVal hWnd As IntPtr, ByVal appName As String, ByVal partList As String) As Integer
End Function
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
Me.treeView1.ExpandAll()
End Sub
End Class
[/highlight]
Wie gesagt, dort funktioniert es wunderbar.
Versuche ich jetzt aber das ganze in meiner großen Anwendung, scheint es schlicht ignoriert zu werden und der TreeView sieht aus wie eh und je (diese hässlichen + und - Zeichen)
In meiner Anwendung wird ein ein angepasster TreeView erzeugt, der einfach von System.Windows.Forms.TreeView erbt, der dann nochmal weitervererbt wird (fragt mich nicht wer auf die Idee gekommen ist, das war vor meiner Zeit).
Ich habe gedacht, wenn ich jetzt zwischen dem ersten Erben und System.Windows.Forms.TreeView noch eine Klasse schalte, die die oben genannte Funktionalität hat, dann würde das auch funktionieren, ist aber scheinbar nicht so
Hier die Klasse:
[highlight=vb.net]
Imports System.Runtime.InteropServices
Public Class NewTreeView
Inherits System.Windows.Forms.TreeView
'<DllImport("uxtheme.dll", CharSet:=CharSet.Unicode)>
'Private Shared Function SetWindowTheme(hWnd As IntPtr, pszSubAppName As String, pszSubIdList As String) As Integer
'End Function
Declare Function SetWindowTheme Lib "uxtheme.dll" ( _
ByVal hWnd As IntPtr, _
Optional ByVal pszSubAppName As String = "", _
Optional ByVal pszSubIdList As String = "") As Int32
'Public Sub New()
' SetWindowTheme(Me.Handle, "Explorer", Nothing)
'End Sub
Protected Overrides Sub CreateHandle()
MyBase.CreateHandle()
Try
SetWindowTheme(Me.Handle, "Explorer", Nothing)
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
End Class
[/highlight]
Ich habe auch schon verschiedenste Variationen durch, aber immer mit dem selben Ergebnis: es interessiert den TreeView nicht.
Ich hab auch mal die beiden erbenden Klassen angehangen.
Vielleicht sehen ja fremde Augen, was ich übersehe oder falsch mache.
Danke schon mal für Eure Hilfe
Andi
ich möchte meinen TreeView (System.Windows.Forms.TreeView) so darstellen lassen, wie er in Win7 aussieht.
Ich habe dazu auch ein Beispiel gefunden, das auf unzähligen Seiten immer wieder erwähnt wird und in meiner kleinen Testanwendung auch wirklich funktioniert.
Hier der Code:
[highlight=vb.net]
Imports System.Runtime.InteropServices
Public Class Form1
Public Sub New()
Me.Font = System.Drawing.SystemFonts.IconTitleFont
InitializeComponent()
SetWindowTheme(treeView1.Handle, "explorer", Nothing)
'SetWindowTheme(listView1.Handle, "explorer", Nothing)
Me.treeView1.HotTracking = True
Me.TreeView1.FullRowSelect = True
End Sub
<DllImport("uxtheme.dll", CharSet:=CharSet.Unicode, ExactSpelling:=True)> _
Private Shared Function SetWindowTheme(ByVal hWnd As IntPtr, ByVal appName As String, ByVal partList As String) As Integer
End Function
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
Me.treeView1.ExpandAll()
End Sub
End Class
[/highlight]
Wie gesagt, dort funktioniert es wunderbar.
Versuche ich jetzt aber das ganze in meiner großen Anwendung, scheint es schlicht ignoriert zu werden und der TreeView sieht aus wie eh und je (diese hässlichen + und - Zeichen)
In meiner Anwendung wird ein ein angepasster TreeView erzeugt, der einfach von System.Windows.Forms.TreeView erbt, der dann nochmal weitervererbt wird (fragt mich nicht wer auf die Idee gekommen ist, das war vor meiner Zeit).
Ich habe gedacht, wenn ich jetzt zwischen dem ersten Erben und System.Windows.Forms.TreeView noch eine Klasse schalte, die die oben genannte Funktionalität hat, dann würde das auch funktionieren, ist aber scheinbar nicht so
Hier die Klasse:
[highlight=vb.net]
Imports System.Runtime.InteropServices
Public Class NewTreeView
Inherits System.Windows.Forms.TreeView
'<DllImport("uxtheme.dll", CharSet:=CharSet.Unicode)>
'Private Shared Function SetWindowTheme(hWnd As IntPtr, pszSubAppName As String, pszSubIdList As String) As Integer
'End Function
Declare Function SetWindowTheme Lib "uxtheme.dll" ( _
ByVal hWnd As IntPtr, _
Optional ByVal pszSubAppName As String = "", _
Optional ByVal pszSubIdList As String = "") As Int32
'Public Sub New()
' SetWindowTheme(Me.Handle, "Explorer", Nothing)
'End Sub
Protected Overrides Sub CreateHandle()
MyBase.CreateHandle()
Try
SetWindowTheme(Me.Handle, "Explorer", Nothing)
Catch ex As Exception
MessageBox.Show(ex.ToString)
End Try
End Sub
End Class
[/highlight]
Ich habe auch schon verschiedenste Variationen durch, aber immer mit dem selben Ergebnis: es interessiert den TreeView nicht.
Ich hab auch mal die beiden erbenden Klassen angehangen.
Vielleicht sehen ja fremde Augen, was ich übersehe oder falsch mache.
Danke schon mal für Eure Hilfe
Andi
Comment