| |
VB.NET - FortgeschritteneZugriff auf Prozedur von UserControl | | | Autor: Dikn | Datum: 21.05.17 08:06 |
| Hallo!
Ich habe ein dem Explorer ähnliches UserControl erstellt mit folgenden zusätzl. Funktionen:
- im Dropdownbereich: zusätzlich Angabe des Namens, Anzeige von leeren Laufwerken (mit Hinweis), entsprechende Symbole
- im Anzeigebereich Laufwerke: nur Symbol und Laufwerkname bzw. Hinweis auf leeres Laufwerk
geöffnetes Verzeichnis kann mit Klick auf einen Button gespeichert und mit einem weiteren Button wieder aufgerufen werden
Nach Klick auf einen Ordner im TreeView soll eine Sub-Prozedur zur Anzeige der enthaltenen Dateien aufgerufen werden. Ich hab's so gelöst: (vereinfachte Version)
Public Class Form1
Private Sub Label1_TextChanged(…) Handles Label1.TextChanged
showFiles(Me.Label1.Text)
End Sub
Private Sub showFiles(ByVal strSelectedPath As String)
MsgBox("showFiles(" & strSelectedPath & ")")
End Sub
End Class Public Class FolderControl
Private Sub FolderControl_Load() Handles Me.Load
Me.TreeView1.Nodes.Add("C:")
Me.TreeView1.Nodes(0).Nodes.Add("Test1")
Me.TreeView1.Nodes(0).Nodes.Item(0).Nodes.Add("Test1_2")
Me.TreeView1.Nodes(0).Nodes.Add("Test2")
Me.TreeView1.Nodes(0).Expand
End Sub
Private Sub TreeView1_AfterSelect(…) Handles TreeView1.AfterSelect
Me.ParentForm.Controls.Find("Label1",False).First.Text = _
Me.TreeView1.SelectedNode.Text
End Sub
End Class Wie macht man's richtig ??? | |
Re: Zugriff auf Prozedur von UserControl | | | Autor: Manfred X | Datum: 21.05.17 11:48 |
| Hallo!
[I]Ich habe ein dem Explorer ähnliches UserControl erstellt mit folgenden zusätzl. Funktionen:[/I]
Ein Usercontrol besitzt zunächst keine eigene Funktionalität, außer dem
allgemeinen Rahmen einer als Control verwendbaren Klasse.
Ist Dein Control von einem anderen (explorer-ähnlichen) Control abgeleitet (Inherits)?
[I]- im Anzeigebereich Laufwerke: nur Symbol und Laufwerkname bzw. Hinweis auf leeres Laufwerk
geöffnetes Verzeichnis kann mit Klick auf einen Button gespeichert und mit einem weiteren Button
wieder aufgerufen werden[/I]
Wie ist das aufgebaut? Gibt es ein Control für Laufwerke und ein weiteres für die
Anzeige der Verzeichnisse in einem ausgewählten Laufwerk? Sind das zwei Treeviews?
In Deinem geposteten Code scheint keine Trennung Laufwerk/Ordner vorzuliegen?
Oder handelt es sich bei "Anzeigebereich" um ein zusätzlich eingebautes Control für
weiterführende Angaben?
[I]Nach Klick auf einen Ordner im TreeView soll eine Sub-Prozedur zur Anzeige der enthaltenen
Dateien aufgerufen werden.[/I]
Zunächst müssen ggf. die enthaltenen Unterordner in weitere Treeview-Knoten eingefügt werden.
Warum verwendest Du ein "Label" für den indirekten Aufruf von "ShowFiles"?
Wieso mußt Du nach "Label1" erst suchen?
(Das Info-Label sollte innerhalb der "ShowFiles"-Methode belegt werden.)
Im VB@Archiv (Tipps und Tricks) sind Beispiele für Dateisystem-Explorer enthalten.
Schau dort mal nach.
Beitrag wurde zuletzt am 21.05.17 um 12:06:00 editiert. | |
Re: Zugriff auf Prozedur von UserControl | | | Autor: Dikn | Datum: 22.05.17 08:47 |
| Vielen Dank für Deine rasche Antwort!
Meine Public Class FolderControl besteht aus:
Bereich Anzeige LW:
PictureBox für entspr. LW-Icon
Label für LW-Bezeichnung
Label für 'Öffnen'
Bereich Auswahl
Listbox
Bereich gefundene Verzeichnisse:
TreeView
2 x Button
Das 'FolderControl' funktioniert einwandfrei
Das in meiner Frage eingefügte 'FolderControl' diente nur zum Verständnis meiner Frage:
Wie kann ich beim Klick auf ein Verzeichnis im TreeView auf eine Sub-Prozedur im
Hauptformular 'frmMain' zugreifen (mit Übergabe FullPath)??? | |
Re: Zugriff auf Prozedur von UserControl | | | Autor: Manfred X | Datum: 22.05.17 09:21 |
| Hallo!
Du hast ein UserControl, auf dem sich u.a. ein Treeview befindet
und willst wohin greifen? Auf das Parent-Formular des User-Control?
Das User-Control darf lediglich ein Ereignis auslösen.
Im Eventargs-Parameter kann der Pfad übergeben werden.
Es liegt dann am Parent-Formular, dieses gemeldete Ereignis in
einer Handler-Routine geeignet zu verarbeiten. | |
Re: Zugriff auf Prozedur von UserControl | | | Autor: Dikn | Datum: 22.05.17 09:41 |
| Wie beschrieben: Zugriff auf Hauptformular
so wie in meinem vereinfachten Beispiel, nur direkt ohne Umweg über Label | |
Re: Zugriff auf Prozedur von UserControl | | | Autor: Manfred X | Datum: 22.05.17 09:46 |
| Ein User-Control hat keinen Zugriff auf das Parent-Formular.
Das Control muß unabhängig von dem Formular sein, auf das es
jeweils gezogen wird.
Die Kommunikation kann deshalb ausschließlich über ein Event erfolgen. | |
Re: Zugriff auf Prozedur von UserControl | | | Autor: Dikn | Datum: 22.05.17 13:29 |
| Zugriff ist möglich. Siehe mein Beispiel. MsgBox zeigt den Pfad für das angeklickte Verzeichnis.
...über Event erfolgen???
wie mache ich das bei meinem Beispiel? | |
Beispiel: UserControl mit Event | | | Autor: Manfred X | Datum: 22.05.17 15:08 |
| Ein UserControl muß unabhängig vom Trägerformular sein.
Wenn du vom UC auf dieses Formular zugreifst, schaffst Du
eine Abhängigkeit.
Hier ein triviales Beispiel für ein UserControl mit Treeview:
Public Class ucTree
'Klasse als Event-Parameter
Public Class TreeNodeClickedEventArgs
Inherits EventArgs
Private _path As String = ""
Public Sub New(path As String)
_path = path
End Sub
Public ReadOnly Property Path As String
Get
Return _path
End Get
End Property
End Class
Dim WithEvents trv As New TreeView With {.Parent = Me}
'Ereignis
Public Event TreeNode_Clicked(sender As Object, _
e As TreeNodeClickedEventArgs)
Private Sub ucTree_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
'testdaten
Dim tn As TreeNode = trv.Nodes.Add("Node1")
tn.Nodes.Add("Subnode1")
tn = trv.Nodes.Add("Node2")
tn.Nodes.Add("Subnode2")
End Sub
Private Sub trv_NodeMouseClick(sender As Object, _
e As System.Windows.Forms.TreeNodeMouseClickEventArgs) _
Handles trv.NodeMouseClick
If e.Button = Windows.Forms.MouseButtons.Right Then
'Ereignis auslösen, Pfad als Parameter
RaiseEvent TreeNode_Clicked _
(Me, New TreeNodeClickedEventArgs(e.Node.Text))
End If
End Sub
End Class Beispielformular (Windows.Forms):
Public Class frmTree
'das UserControl
Dim WithEvents uct As New ucTree With {.Parent = Me}
'Der Eventhandler
Private Sub uct_TreeNode_Clicked(sender As Object, _
e As ucTree.TreeNodeClickedEventArgs) Handles uct.TreeNode_Clicked
MsgBox(e.Path)
End Sub
End Class | |
Re: Beispiel: UserControl mit Event | | | Autor: Dikn | Datum: 22.05.17 15:31 |
| Vielen, vielen Dank!
Das muß ich mir erst in Ruhe zu Gemüte führen!!! | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|