vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Weitere 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.).
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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