Avatar billede slash_underscore Nybegynder
04. maj 2005 - 21:34 Der er 9 kommentarer

Smartere måde at vælge tabctrl på

Hej,

Pt. vælger jeg tabctrl's på denne måde:

=================

    Function TabCtrl(ByVal Tabselect As String)    ' Denne funktion vælger hvilken TabCtrl der skal vises'
        If Tabselect = "oversigt" Then 'Hvis det var denne tabcontrol, viser den denne, eller søger den for at den er fjernet'
            TabCtrl_oversigt.Visible = True
        Else
            TabCtrl_oversigt.Visible = False
        End If

        If Tabselect = "sogning" Then
            TabCtrl_sogning.Visible = True
        Else
            TabCtrl_sogning.Visible = False
        End If

        If Tabselect = "faktura" Then
            TabCtrl_faktura.Visible = True
        Else
            TabCtrl_faktura.Visible = False
        End If

        If Tabselect = "bestil" Then
            TabCtrl_bestil.Visible = True
        Else
            TabCtrl_bestil.Visible = False
        End If

        If Tabselect = "db" Then
            TabCtrl_db.Visible = True
        Else
            TabCtrl_db.Visible = False
            lbl_con.Text = ""
        End If

    End Function

=================

Synes det virker lidt bøvet - Kan det ikke gøres smartere?
Avatar billede burningice Nybegynder
04. maj 2005 - 22:21 #1
du kan lave noget reflection

string s = "faktura";

            foreach (FieldInfo fi in this.GetType().GetFields())
            {
                if (fi.FieldType == typeof(TabControl))
                {
                    if (fi.Name == "TabCtrl_"+ s)
                        ((TabControl)fi.GetValue(this)).Visible = true;
                    else
                        ((TabControl)fi.GetValue(this)).Visible = false;
                }
            }
Avatar billede slash_underscore Nybegynder
06. maj 2005 - 14:06 #2
Den kommer du vist til at forklare lidt nærmere... (Det er ikke flere faneblade i samme tabctrl, men flere tabctrl) - Hvordan ved din kodestump, hvad de forskellige tabctrls hedder... (Skal jo sætte Visible=FALSE, på alle andre end det navn funktionen kaldes med)

Kan du evt. omskrive min funktion, så den passe med din kodestump? - Jeg fatter ikke lige det kode...
Avatar billede burningice Nybegynder
07. maj 2005 - 17:18 #3
min kode er i c#, så du er nok lovlig undskyldt hvis du ikke forstår den ;)

Ang. hvordan koden kan se hvad de enkelte tabcontrols hedder, så ligger det i Name-propertien på et FieldInfo-object (fi.Name).

Det koden gør er egentlig at slavisk gå igennem alle dine tabcontrol-variabler og tjekke på deres navn og visibility.

Hvis det skal omkskrives til din function, så vil det blive følgende (stadigvæk i c#)

public void TabCtrl(string TabSelect) {
    foreach (FieldInfo fi in this.GetType().GetFields())
            {
                if (fi.FieldType == typeof(TabControl))
                {
                    if (fi.Name == "TabCtrl_"+ TabSelect)
                        ((TabControl)fi.GetValue(this)).Visible = true;
                    else
                        ((TabControl)fi.GetValue(this)).Visible = false;
                }
            }
}
Avatar billede slash_underscore Nybegynder
07. maj 2005 - 17:40 #4
C# kan da ikke umiddelbart inkluderes i VB.NET - kan det?
Avatar billede burningice Nybegynder
07. maj 2005 - 17:53 #5
nej, men det er forholdsvis nemt at oversættes...

Public  Sub TabCtrl(ByVal TabSelect As String)
    Dim fi As FieldInfo
    For Each fi In Me.GetType().GetFields()
                If fi.FieldType = Type.GetType(TabControl) Then
                    If fi.Name = "TabCtrl_"+ TabSelect Then
                        (CType(fi.GetValue(Me), TabControl)).Visible = True
                    Else
                        (CType(fi.GetValue(Me), TabControl)).Visible = False
                    End If
                End If
    Next
End Sub

'----------------------------------------------------------------
' Converted from C# to VB .NET using CSharpToVBConverter(1.2).
' Developed by: Kamal Patel (http://www.KamalPatel.net)
'----------------------------------------------------------------
Avatar billede slash_underscore Nybegynder
07. maj 2005 - 22:45 #6
Dim fi As FieldInfo:

d:\dokumenter\Visual Studio Projects\WindowsApplication1\Lagerstyring.vb(567): Type 'FieldInfo' is not defined.

(CType(fi.GetValue(Me), TabControl)).Visible = True:

d:\dokumenter\Visual Studio Projects\WindowsApplication1\Lagerstyring.vb(571): Syntax error.

Og en nærmere forklaring, punkt for punkt til koden (for forståelsens skyld) ville heller ikke være dårligt...
Avatar billede burningice Nybegynder
11. maj 2005 - 11:45 #7
Public  Sub TabCtrl(ByVal TabSelect As String)
    ' FieldInfo er en klasse der repræsenterer et field i din klasse.
    ' Dvs. en variabel der har et globalt scope for hele klassen
    Dim fi As FieldInfo
   
    ' Dernæst løber vi igennem alle fields der findes i den type klasse som vi står i nu.
    ' Bemærk at der er forskel på klassen og så en instans af klassen
    For Each fi In Me.GetType().GetFields()

                ' Vi spørger om typen af det field vi har fundet svarer til typen af en TabControl
                If fi.FieldType = Type.GetType(TabControl) Then

                  ' Dernæst spørger vi om navnet på fieldet svarer til det ønskede navn (f.eks. TabCtrl_Soeg)
                    If fi.Name = "TabCtrl_"+ TabSelect Then

                        ' I så fald hiver vi fat i værdien for dette field i denne instans af klassen som vi står i,
                        ' og sætter den fundne TabControl til visible
                        (CType(fi.GetValue(Me), TabControl)).Visible = True
                    Else

                        ' Hvis ikke navnet matchede, så skal TabControllen sættes til invisible
                        (CType(fi.GetValue(Me), TabControl)).Visible = False
                    End If
                End If
    Next
End Sub


Ang. at FieldInfo ikke er defineret, så prøv at importer System.Reflection-namespacet
Avatar billede slash_underscore Nybegynder
20. juli 2005 - 10:47 #8
SVAR?
Avatar billede burningice Nybegynder
26. juli 2005 - 19:53 #9
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester