2 Probleme, wer weiss Rat

Hallo,

wie bereits im Betreff erwähnt habe ich 2 Probleme. Eine davon stellte ich bereits in einen anderen Forum, jedoch ohne Erfolg. Deswegen poste ich sie hier auch noch einmal.

Problem 1:

VisualStyleElement.TreeView.Glyph-Klassekurzer Sachverhalt.
Es besteht ein UserControl. Auf diesem befindet sich ein Treeview Element, was Daten darstellen soll.
Nun ist es so, das jeder Eintrag mit einem Image versehen ist. Es sind keine Rootlines eingeblendet.
Wenn ein Knoten nun Untereintraege besitzt bekomme ich ja den Plus Button neben dem Eintrag angezeigt. Wenn der Knoten geöffnet ist, so sieht man ja den Minus Button.

Genau diesen Plus Button und Minus Button möchte ich ändern. Es soll für den Plus Button ein Pfeil nach Rechts dargestellt werden und für den Minus Button ein Pfeil nach unten! ( Wie im Explorer).
Eine wenig Googeln brachte mich zu der Erkenntnis das ich mich der VisualStyleElement.TreeView.Glyph-Klasse zu schaffen machen muss und der Closed und der Opened Eigenschaft ein neues Bild zuweisen muss.

Nur wie mache ich das? Alle Versuche schlugen bisher fehlt.
Hat jemand eine Idee, wie ich da nun vorgehen muss.

Problem 2:

Im Netzwerk sind mehrere Rechner angeschlossen.
Das auslesen, welche Rechner dran haengen und Online sind, habe ich bereits. Auch das ermitteln der IP Adresse. Ich möchte nun aber von jeden Rechner die Freigegebenen Dateien auslesen.

Es soll ein Explorer darstellen, der die Rechner unter dem Treeview Knoten Netzwerk anzeigt und dann beim anklicken die Dateien.

Hat jemand ein Ansatz wie ich an die Daten komme?

Gruß Alex

Hallo!

Zum TreeView-Problem: Ich fürchte, Du musst das Zeichnen des TV selbst übernehmen.
Nach meinem Verständnis sind die VisualStyleElements die Teile zum Zeichnen eines Steuerelements, die normalerweise verwendet werden. Windows hat einen bestimmten Style eingestellt und zeichnet die Controls mit genau den Einstellungen dieses Styles. Alle Controls.
Wenn ausschließlich ein einziger Treeview anders aussehen soll als der Rest, musst Du ihn selbst malen.

Das Auffinden der Freigaben eines Rechners:
Falls Du partout nichts anderes findest, könntest Du noch per „net view \Computername“ auf der Kommandozeile die Freigaben auflisten lassen und das Ergebnis parsen.
Oder Du googelst mal, wie „net view“ das macht und implementierst es selbst mit .NET. Ich würde mich in diesem Fall aber auf einiges an Interop einstellen…

Gruß,
Martin

Hallo Martin,

erst einmal vielen Dank das Du Dich der Sache angenommen hast :smile:

Zum TreeView-Problem: Ich fürchte, Du musst das Zeichnen des
TV selbst übernehmen.
Nach meinem Verständnis sind die VisualStyleElements die Teile
zum Zeichnen eines Steuerelements, die normalerweise verwendet
werden. Windows hat einen bestimmten Style eingestellt und
zeichnet die Controls mit genau den Einstellungen dieses
Styles. Alle Controls.
Wenn ausschließlich ein einziger Treeview anders aussehen soll
als der Rest, musst Du ihn selbst malen.

Genau diese Befürchtung habe ich gehabt :frowning:
Ich habe nochmals und lange gegoogelt. Dabei bin ich auf folgendes gestossen.

https://msdn.microsoft.com/de-de/library/system.wind…

Sehe ich das nun richtig. Es soll ein Explorer Control werden. Ich habe nun ein UserControl erstellt. Dort rufe ich doch folgende Routine auf

 Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
 MyBase.OnPaint(e)
 End Sub

Laut dem Artikel, den ich oben gepostet habe, müsste ich ja wiefolgt das abändern

Public Sub DrawVisualStyleElementTreeViewGlyph1(ByVal e As PaintEventArgs)
 If (VisualStyleRenderer.IsElementDefined( \_
 VisualStyleElement.TreeView.Glyph.Closed)) Then
 Dim renderer As New VisualStyleRenderer \_
 (VisualStyleElement.TreeView.Glyph.Closed)
 Dim rectangle1 As New Rectangle(10, 50, 50, 50)
 renderer.DrawBackground(e.Graphics, rectangle1)
 e.Graphics.DrawString("VisualStyleElement.TreeView.Glyph.Closed", \_
 Me.Font, Brushes.Black, New Point(10, 10))
 Else
 e.Graphics.DrawString("This element is not defined in the current visual style.", \_
 Me.Font, Brushes.Black, New Point(10, 10))
 End If
End Sub

 Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
 DrawVisualStyleElementTreeViewGlyph1(e)
 MyBase.OnPaint(e)
 End Sub

Nun sollte doch der Plus Button neu gezeichnet werden. Die Routine DrawVisualStyleElementTreeViewGlyph1 müsste ich noch auf das Opened reagieren lassen. Dann sollten doch die beiden Sachen neu gezeichnet werden.
Wenn ich das soweit richtig sehe, wie müsste dann das zeichnen genau aussehen. Denn so wie ich es verstehe …

Dim rectangle1 As New Rectangle(10, 50, 50, 50)
 renderer.DrawBackground(e.Graphics, rectangle1)
 e.Graphics.DrawString("VisualStyleElement.TreeView.Glyph.Closed", \_
 Me.Font, Brushes.Black, New Point(10, 10))

wir ja hier der Eintrag gezeichnet oder?

Das Auffinden der Freigaben eines Rechners:
Falls Du partout nichts anderes findest, könntest Du noch per
„net view \Computername“ auf der Kommandozeile die Freigaben
auflisten lassen und das Ergebnis parsen.
Oder Du googelst mal, wie „net view“ das macht und
implementierst es selbst mit .NET. Ich würde mich in diesem
Fall aber auf einiges an Interop einstellen…

Was dieses angeht, das Problem stelle ich erst einmal etwas nach hinten :wink:
Welche Rechner in welchen Netzwerkgruppen angemeldet sind, das habe ich bereits. Genauso, wie die Freigegebenen Ordner. Nun habe ich nur noch das Problem Die Ordner direkt auszulesen und ggfls. das Password für das Netzwerk zu übergeben.

Also an die Info zum Bsp. Rechner = LS - H … ( NAS Platte) und die Freigegebenen Ordner Public und Share komme ich, aber nicht an den Inhalt was in Share ist. Den Code kann ich Dir gerne mal posten, wenn es hilft.

Liebe Grüße Alex

Gruß,
Martin