| |
VB.NET - FortgeschritteneWeitere TabPages erstellen zur Laufzeit | | | Autor: Virtex | Datum: 27.11.22 15:33 |
| Hallo zusammen,
ich schreibe grad an einem kleinen Druckertreibertool. Dazu lese ich vorhandene Druckertreiber aus.
Jeder Druckertreiber kann mehrere Devices (virtuelle Drucker) enthalten.
Ich zähle also die enthaltenen Devices und möchte nun TabPages erstellen für jedes Device.
Das reine erstellen klappt soweit auch schon, ebenso das löschen wenn ein neuer Treiber ausgewählt wird.
Allerdings sind die TabPages leer, was soweit auch klar und vollkommen verständlich ist.
Da ich sowas noch nie programmiert habe, stelle ich mir nun die Frage, wie ich die TabPages nun immer gleich aussehend erstellen kann?
Mache ich dazu eine Page im Designer fertig, setze diese auf Hidden und kann diese als Vorlage zur vervielfältigung nutzen oder wie macht ihr sowas?
Außer dem erstellen hab ich bislang noch nichts in die Richtung gemacht, da ich erstmal Input dazu suche. Code ist daher an dieser Stelle bis auf den kurzen folgenden Part noch nicht verfügbar:
'Tabs erstellen pro Device
For i = 1 To int_devices
Tabs_PRT.TabPages.Add("Device " & i)
Next i Bin gespannt auf Anregungen
Gruß
Virtex | |
Re: Weitere TabPages erstellen zur Laufzeit | | | Autor: Manfred X | Datum: 28.11.22 07:28 |
| Hallo!
Für diese Zwecke gibt es das Konzept der "Vererbung" (Inherits).
Man erstellt eine neue Klasse, die von TabPage erbt und richtet dort alles ein,
was man zusätzlich zur Funktionalität der Basisklasse braucht.
Kleines Beispiel:
Public Class clsTabPage
Inherits TabPage
Private lblHeader As New Label With
{.Parent = Me, .Location = New Point(10, 10), .Size = New Size(200, 30)}
Public Sub New(headline As String)
Me.Size = New Size(220, 100)
lblHeader.Text = headline
End Sub
End Class Instanzen dieser von Tabpage abgeleiteten Klasse kann man dann - wie gewohnt -
auf einem Formular einem Tabcontrol hinzufügen.
Sei tc ein Tabcontrol:
tc.TabPages.Add(New clsTabPage("meine TabPage"))
tc.TabPages.Add(New clsTabPage("meine zweite TabPage"))
tc.TabPages(0).BackColor = Color.Yellow
tc.TabPages(1).Text = "was auch immer"
Beitrag wurde zuletzt am 28.11.22 um 07:38:45 editiert. | |
Re: Weitere TabPages erstellen zur Laufzeit | | | Autor: Virtex | Datum: 28.11.22 09:03 |
| Guten Morgen Manfred,
das hört sich genau nach dem an was ich suche. Das werde ich mir mal genauer anschauen und falls ich noch Fragen dazu habe werde ich googlen und mich im schlimmsten Fall noch einmal melden.
In dieser neuen Klasse könnte ich dann aber auch Funktionen auf die Felder legen und diese ansprechen um sie zu füllen?
Es wird ja ein schöner Mix aus Text-, Check- und Comboboxen die bei onchange reagieren sollen... | |
Re: Weitere TabPages erstellen zur Laufzeit | | | Autor: Manfred X | Datum: 28.11.22 10:21 |
| Hallo!
In der abgeleiteten Klasse kann man alles programmieren.
Man muss nur darauf achten, dass die neu hinzugefügten Funktionen nicht
mit den Funktionen der Basisklasse kollidieren (Shadowing, Overriding usw.). | |
Re: Weitere TabPages erstellen zur Laufzeit | | | Autor: Virtex | Datum: 28.11.22 10:35 |
| Klingt super. Bau das grad schon ein und hab noch Anfangsschwierigkeiten aber das wird schon.
Vielen Dank für den kleinen Schubser und das Beispiel. Damit kann ich arbeiten | |
Re: Weitere TabPages erstellen zur Laufzeit | | | Autor: Virtex | Datum: 28.11.22 17:01 |
| Kurze Rückmeldung:
Das klappt super damit. Habs jetzt soweit, dass ich sämtliche Forms erstellt bekomme und hab auch schon die Namen verteilt, mit denen ich die dann ansprechen kann. Klappt also super! Bin mal gespannt ob ich auch die Funktionen dareinbekomm
Vielen Dank
Gruß
Virtex | |
Re: Weitere TabPages erstellen zur Laufzeit | | | Autor: Virtex | Datum: 30.11.22 11:20 |
| Guten Morgen noch einmal.
ich versuche gerade von der Mainform auf die angelegten Felder zuzugreifen. Das klappt leider nicht wie gedacht.
Ich habe den Forms jeweils Namen gegeben:
Public Sub New(headline As String)
lblHeader.Text = headline
txt_prt_ID.Name = "txt_prt_dev_" & DeviceNr & "_ID" _
'txt_prt_dev_X_id
txt_prt_Name.Name = "txt_prt_dev_" & DeviceNr & "_name" _
'txt_prt_dev_X_name
cmb_prt_type.Items.Add("netprinter")
cmb_prt_type.Items.Add("serdrawer")
cmb_prt_type.Name = "cmb_prt_dev_" & DeviceNr & "_type" _
'cmb_prt_dev_X_type
'Group1 Inhalt:
txt_prt_spoolpath.Name = "txt_prt_dev_" & DeviceNr & "_spoolpath" _
'txt_prt_dev_X_spoolpath
txt_prt_Delay.Name = "txt_prt_dev_" & DeviceNr & "_delay" _
'txt_prt_dev_X_delay Jetzt dachte ich, ich könnte darauf auch so von der Startform drauf zugreifen, da es ja nun ein Element mit Namen ist... Das klappt leider nicht. Wie genau kann ich die nun ansprechen?
Wenn ich zum testen einen Button anlege und auf diesen dann z.B. txt_prt_dev_1_spoolpath.Text = "Test" setze, funktioniert es nicht, da txt_prt_dev_1_spoolpath nicht deklariert ist. Ebenso funktioniert clsTabPage.txt_prt_dev_1_spoolpath nicht, da es kein Member ist.
Main_Functions.txt_prt_dev_1_spoolpath auch nicht, obei Main_Functions das Modul ist, in dem die Klasse clsTabPage hinterlegt ist.
Wie ist hier das genaue Vorgehen bei?
Gruß
Virtex | |
Re: Weitere TabPages erstellen zur Laufzeit | | | Autor: Manfred X | Datum: 30.11.22 12:24 |
| Hallo!
Du musst Dir darüber im klaren werden, wie Du das Programm strukturieren willst.
Du kannst Deine Controls öffentlich deklarieren oder spezielle Zuweisungsmethoden erstellen.
Public Class clsTabPage
Inherits TabPage
'Öffentliches Control
Public lblHeader As New Label With
{.Parent = Me, .Location = New Point(10, 10), .Size = New Size(200, 30)}
Public Sub New(headline As String)
Me.Size = New Size(220, 100)
lblHeader.Text = headline
End Sub
'öffentliche Zuweisungsfunktion
Public Sub SetHeadline(headline As String)
lblHeader.Text = headline
End Sub
End Class Zu beachten ist, dass die TabPage-Auflistung des TabControl Instanzen der
Basisklasse als TabPageCollection zur Verfügung stellt.
Zugriffe auf Methoden oder Controls abgeleiteter Klassen erfordern ein Casting.
Anknüpfend an obiges Beispiel:
'Zugriff auf das öffentliche Control
Dim tp0 As clsTabPage = DirectCast(tc.TabPages(0), clsTabPage)
tp0.lblHeader.Text = "Eine Headline"
'Zugriff auf öffentliche Methode
Dim tp1 As clsTabPage = DirectCast(tc.TabPages(1), clsTabPage)
tp1.SetHeadline("Auch eine Headline") Ich empfehle öffentliche Zuweisungs- bzw. Abfragefunktionen,
weil dadurch die Klasse besser zu warten und zu entwickeln ist.
Beitrag wurde zuletzt am 30.11.22 um 12:34:35 editiert. | |
Re: Weitere TabPages erstellen zur Laufzeit | | | Autor: Virtex | Datum: 30.11.22 15:27 |
| Hi!
ok vielen Dank für den Input Werd ich so mal versuchen zu implementieren.
Bin gespannt wie weit ich komme.
Wie gesagt:
Vielen Dank!! | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere 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
|
|