Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  vb.net: tabpage deaktivieren, verstecken, disablen...

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  vb.net: tabpage deaktivieren, verstecken, disablen... (4224 mal gelesen)
KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

erstellt am: 14. Sep. 2015 11:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Experten,
ich habe da mal wieder ein Problem:

Ich habe ein Programm mit einem TabControl (System.Windows.Forms.Tabcontrol) mit mehreren Reitern, also TabPages.
Nun möchte ich in einem bestimmten Fall nur noch eine dieser TabPages verfügbar machen, die anderen müssen disabled, versteckt, gesperrt, was auch immer sein, also vom User einfach nicht anwählbar.
Meine googeleien führen immer entweder zu enable=false, dispose oder zu remove.
Ich habs probiert mit einer for...each-schleife:

Code:
            For Each tp As TabPage In TabGeneral.TabPages
                Select Case tp.Name
                    Case "tpModifications"
                        'do nothing
                    Case Else
                        'deaktivieren
                        tp.Hide()
                End Select
            Next
Das Problem: Außer "dispose" und "hide" steht mir keine passende Methode zur Verfügung!
Dispose geht nicht, da die Tabpages viele controls enthalten, die während der Laufzeit angesprochen werden, auch wenn die Tabs nicht ausgewählt sind.
Hide kann ich verwenden, funktioniert aber nur temporär: Beim Start wird der Inhalt der tabpage ausgeblendet, wenn ich die aber noch einmal aktiviere, ist alles wieder sichtbar.
Die Remove-Methode oder Enabled-Eigenschaft werden mir gar nicht angezeigt, die kann ich nicht verwenden.

Was mach ich falsch, wieso kann ich das blöde Ding nicht disablen?

Alternative: Wenn das nicht funktioniert, bleibt mir nur die Alternativlösung, bei jedem Tab im "enter"-Event zu prüfen, ob er angezeigt werden darf. Und wenn nicht, wieder einen erlaubten Tab zu aktivieren. Das geht, habe ich anderswo auch schon verwendet, ist aber natürlich viel aufwändiger.

------------------
Klaus

www.al-ko.com | mein Gästebuch

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2014
Plateia, Canalis
Visual Basic

erstellt am: 14. Sep. 2015 12:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

Hallo Namensvetter,

Warum verwendest Du keine Multipages? Die kannst Du nach belieben ein- und ausblenden und vom Aussehen her ist das kein Unterschied.
Ausblenden über: UserForm1.MultiPage1.Pages.Item("Page2").Visible = True

Grüße
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

erstellt am: 14. Sep. 2015 13:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hmm...Danke für den Tipp, aber...

Multipage gibts nicht in vb.net (Visual Studio Premium 2013).
Auch nicht in VSTA (zumindest nicht bei mir).
In beiden Fällen gibt's 'nur' TabControl mit TabPages. Das sollte wohl die verbesserte Variante der Multipages sein (Ha ha)!

Multipage scheint es nur in VBA zu geben. Das hilft mir aber jetzt nicht.

------------------
Klaus

www.al-ko.com | mein Gästebuch

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2014
Plateia, Canalis
Visual Basic

erstellt am: 14. Sep. 2015 14:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

Ok, war mir nicht bewußt dass Du vb.net benutzt.
Schau mal hier fand ich gerade beim suchen ..

Grüße
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HenryV
Mitglied
Konstrukteur, Engineering


Sehen Sie sich das Profil von HenryV an!   Senden Sie eine Private Message an HenryV  Schreiben Sie einen Gästebucheintrag für HenryV

Beiträge: 778
Registriert: 18.05.2005

SolidWorks 2020 x64 SP3.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 21H1
Microsoft Office 365 ProPlus
Microsoft Visual Studio Enterprise 2022

erstellt am: 14. Sep. 2015 14:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für KMassler 10 Unities + Antwort hilfreich

Hallo Klaus

Ich habe mal die TabPage-Extension von hier ins VB übersetzt.

Code:
Public Module TabPageExtensions

    Private Structure TabPageData
        Friend Index As Integer
        Friend Parent As TabControl
        Friend Page As TabPage

        Friend Sub New(ByVal _index As Integer, ByVal _parent As TabControl, ByVal _page As TabPage)
            Index = _index
            Parent = _parent
            Page = _page
        End Sub

        Friend Shared Function GetKey(ByVal tabCtrl As TabControl, ByVal tabPage As TabPage) As String
            Dim key As String = ""
            If tabCtrl IsNot Nothing AndAlso tabPage IsNot Nothing Then
                key = [String].Format("{0}:{1}", tabCtrl.Name, tabPage.Name)
            End If
            Return key
        End Function

    End Structure

    Private hiddenPages As New Dictionary(Of String, TabPageData)()

    <System.Runtime.CompilerServices.Extension()> _
    Public Sub SetVisible(ByVal page As TabPage, ByVal parent As TabControl)
        If parent IsNot Nothing AndAlso Not parent.IsDisposed Then
            Dim tpinfo As TabPageData

            Dim key As String = TabPageData.GetKey(parent, page)
            If hiddenPages.ContainsKey(key) Then
                tpinfo = hiddenPages(key)
                If tpinfo.Index < parent.TabPages.Count Then
                    parent.TabPages.Insert(tpinfo.Index, tpinfo.Page)
                Else
                    ' add the page in the same position it had
                    parent.TabPages.Add(tpinfo.Page)
                End If
                hiddenPages.Remove(key)
            End If
        End If
    End Sub

    <System.Runtime.CompilerServices.Extension()> _
    Public Sub SetInvisible(ByVal page As TabPage)
        If IsVisible(page) Then
            Dim tabCtrl As TabControl = DirectCast(page.Parent, TabControl)
            Dim tpinfo As TabPageData
            tpinfo = New TabPageData(tabCtrl.TabPages.IndexOf(page), tabCtrl, page)
            tabCtrl.TabPages.Remove(page)
            hiddenPages.Add(TabPageData.GetKey(tabCtrl, page), tpinfo)
        End If
    End Sub

    <System.Runtime.CompilerServices.Extension()> _
    Public Function IsVisible(ByVal page As TabPage) As Boolean
        Return page IsNot Nothing AndAlso page.Parent IsNot Nothing
        ' when Parent is null the tab page does not belong to any container
    End Function

    <System.Runtime.CompilerServices.Extension()> _
    Public Sub CleanUpHiddenPages(ByVal page As TabPage)
        For Each info As TabPageData In hiddenPages.Values
            If info.Parent IsNot Nothing AndAlso info.Parent.Equals(DirectCast(page.Parent, TabControl)) Then
                info.Page.Dispose()
            End If
        Next
    End Sub

End Module



Beispiel zum Ausblenden
Code:
TabPage2.SetInvisible()
TabPage3.SetInvisible()

Beispiel zum Einblenden
Code:
TabPage2.SetVisible(TabControl1)
TabPage3.SetVisible(TabControl1)

Gruss Andreas

------------------
21 ist nur die halbe Antwort.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

erstellt am: 14. Sep. 2015 15:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hey Andreas,

das ist mal wieder cool 
Ich versteh zwar nicht die Hälfte, aber es funktioniert und ich nehm's einfach mal sowie es ist. 

(Bist du sicher, dass du Konstrukteur bist und nciht Programmierer?  )

@Klaus: Das arbeitet komischerweise auch wieder mit Methoden, die mein TabControl gar nicht anbietet (Remove...)

------------------
Klaus

www.al-ko.com | mein Gästebuch

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Zerspanungsmechaniker als CNC-Einrichter (m/w/d)

Die Imm Cleaning Solutions GmbH entwickelt, konstruiert und produziert Oberflächenreinigungssysteme für industrielle Anwendungsbereiche aller Branchen.
Wir zeichnen uns durch unsere qualitativen Produkte, eine hohe Flexibilität und durch gelebte Kundenorientierung aus. Bei unseren Kunden und Lieferanten genießen wir einen sehr guten Ruf. Da es unsere Mitarbeiter sind, die die Qualität unserer ...

Anzeige ansehenMechaniker
KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



Sehen Sie sich das Profil von KMassler an!   Senden Sie eine Private Message an KMassler  Schreiben Sie einen Gästebucheintrag für KMassler

Beiträge: 2657
Registriert: 06.11.2000

SolidWorks Start 1999
** CSWP 01/2008 **
Dell Precision 7540 mobile Workstation,
64GB, Quadro RTX 3000;
SWX2020 SP5;
SAP/PLM+ECTR;
DriveWorks Pro;
Programmierung: VBA, aktuell Visual Studio 2017/VB.Net

erstellt am: 14. Sep. 2015 15:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

@Klaus:
Korrektur: War mein Fehler, ich habe immer nach sowas wie TabControl1.TabPages(index).Remove gesucht und nicht gefunden.
Die Syntax ist eine andere: TabControl1.TabPages.Remove(<myTabpage>). Es gibt sie also doch, die vermissten Methoden.
Dank eurer Beispiele hat sich der Knoten gelöst.
@Andreas:
Da ich die Tabs in meinem Fall nicht wieder herstellen muss, muss ich sie auch nicht zwischenspeichern.
Damit geht's wieder auf die kurze Art:

For t As Integer = TabGeneral.TabPages.Count - 1 To 0 Step -1
    If TabGeneral.TabPages(t).Name <> "tpModelRight" Then 'die einzige Bedingung, die ich im Moment brauche.
        TabGeneral.TabPages.Remove(TabGeneral.TabPages(t))
    End If
Next

Danke euch, dass ihr mir den Weg gewiesen habt  

[Edit]Zu meiner Ehrenrettung: Dispose oder Enabled etc. gibt's aber trotzem nicht! Da habe ich mich nicht komplett verrannt  [/Edit]

------------------
Klaus

www.al-ko.com | mein Gästebuch

[Diese Nachricht wurde von KMassler am 15. Sep. 2015 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz