Uitrollen/ intrekken subformulier

Status
Niet open voor verdere reacties.

Rudimental

Gebruiker
Lid geworden
23 feb 2015
Berichten
10
Geachte lezer,

Ik ben bezig met een database voor het weergeven van informatie uit een WMS die elke X seconden gerefresht wordt. Dit lukt allemaal al, alleen loop ik vast op één klein grafisch probleem. Ik heb namelijk een subformulier met parameters, maar ik wil dat deze alleen zichtbaar is wanneer er op een knop gedrukt wordt. Nu lukt het al om dit subformlier wel en niet weer te geven door middel van .Visible, alleen moet de ruimte die het subformulier inneemt nog verdwijnen. Ik heb nu onderstaande code, alleen deze laat nog steeds de ruimte zien die voor het subformulier nodig is.

Heeft een van jullie enig idee hoe deze code aangepast moet worden?

Alvast bedankt.

Code:
Private Sub Btn_Parameters_Click()
    If Me.Frm_Parameters.Visible = False Then
        Me.Frm_Parameters.Visible = True
        Me.Frm_Parameters.Height = 4000
    ElseIf Me.Frm_Parameters.Visible = True Then
        Me.Frm_Parameters.Visible = False
        Me.Frm_Parameters.Height = 0
    End If
End Sub
 
Je moet de hoogte van de detailsectie uiteraard ook aanpassen.
Code:
Private Sub Btn_Parameters_Click()
Dim lngH As Long
    lngH = Me.InsideHeight
    With Me.Frm_Parameters
        If .Visible = False Then
            .Visible = True
            .Height = 4000
            Me.InsideHeight = lngH + 4000
        Else
            .Visible = False
            .Height = 0
            Me.InsideHeight = lngH - 4000
        End If
    End With
End Sub
 
Laatst bewerkt:
Bedankt voor het snelle antwoord!
Qua werking is er helaas niets veranderd ten opzichte van wat ik al had. De .Visible doet zijn werk en verbergt/toont het subformulier wanneer op de button geklikt wordt. Maar de ruimte die hiervoor op het main formulier gereserveerd wordt, blijft constant in beeld. Kan het er mee te maken hebben dat ik het subformulier in de koptekst heb staan?

Code:
Else
            .Visible = False
[B]            frmFreightCost.Height = 0[/B]
            Me.InsideHeight = lngH - 4000

Bovenstaande regel heb ik veranderd in .Height, dat moet volgens mij niets uitmaken toch?
 
Ik ben inmiddels een stukje verder en het lag inderdaad aan het feit dat mijn subformulier in de header zat. Deze heb ik nu naar de detailsectie verplaatst en het verbergen en tonen werkt goed met onderstaande code. Nu is er echter nog één klein probleem, namelijk dat de hoogte van de mainform zich evenredig aan de subform aanpast. Oftewel als ik klik op de button om de parameters te tonen, wordt het formulier in zijn totaliteit 4000 twips langer. Dit wil ik echter een vaste hoogte houden.

Code:
Private Sub Btn_Parameters_Click()
Dim lngH As Long
    lngH = Me.InsideHeight
    With Me.Frm_Parameters
        If .Visible = False Then
            .Visible = True
            .Height = 4000
            Me.InsideHeight = lngH + 4000
        Else
            .Visible = False
            .Height = 0
            Me.InsideHeight = lngH - 4000
        End If
    End With
End Sub
 
Laatst bewerkt:
Wacht even, wat wil je nu? Je hebt een formulier met een detailsectie die je wilt vergroten/verkleinen op basis van een subformulier. Dat werkt (sorry nog voor de kleine fout in de code, maar die had je al gezien ;) ). Dan is het toch logisch dat het complete formulier groter of kleiner wordt? En als je dat formulier even groot wilt houden: waar moet de extra ruimte dan komen? In de koptekst? Lelijk. In de voettekst? Net zo lelijk. In de detailsectie? Waarom verklein je die dan? Kan je de procedure net zo goed weglaten! En meer smaken zijn er echt niet...
 
Ik denk dat ik niet helemaal duidelijk ben geweest. Ik zal het even iets gedetailleerder uitleggen.

We hebben een Main Formulier met een koptekst met daarin buttons en in de detailsectie twee subformulier naast elkaar, die gegevens uit het WMS tonen. Daarboven wil ik, wanneer ik op de button Parameters klik, het subformulier van de de parameters tonen/ verbergen. Het liefst wil ik dat de hoogte van het mainformulier gelijk blijft wanneer op de button geklikt wordt. Is dit niet mogelijk of vrij lastig, hoeft het niet per sé.

Wat ik graag wil is het rode subformulier uit het voorbeeld hieronder tonen en verbergen en dat de hiervoor bestemde ruimte in de detailsectie dan ook verschijnt en verdwijnt. Enige wat nu nog niet werkt is dat wanneer hierop geklikt wordt, de detailsectie vergroot/ verkleind wordt, maar de ruimte van het subformulier Parameters nog steeds getoond wordt.

Of zou ik de twee subformulieren onder de parameters omhoog/ omlaag moeten verplaatsen als ik op de button klik?

Code:
 _______________________
|                       |
|  KOPTEKST (BUTTONS)   |
|-----------------------|
[COLOR="#FF0000"]|  SUBFORM PARAMETERS   |
|-----------------------|[/COLOR]
|           |           |
|           |           |
|  SUBFORM  |  SUBFORM  |
|  MONITOR  |  MONITOR  |
|           |           |
|           |           |
|           |           |
|___________|___________|
 
Na een poosje uitproberen ben ik uiteindelijk tot de volgende code gekomen die voor mij precies doet wat ik wil! Ik zal hem delen, zodat anderen hier in de toekomst wellicht iets mee kunnen.
Wanneer op de button geklikt wordt gebeurt het volgende:

  • Indien subform_Parameters niet zichtbaar is:
    • Toon subformulier Parameters
    • pas hoogte van subformulier aan naar 2000 twips
    • verplaats de subformulieren Monitor_1 & Monitor_2 naar 2000 twips vanaf boven
  • Indien subform_Parameters zichtbaar is:
    • Verberg subformulier Parameters
    • pas hoogte van subformulier aan naar 0 twips
    • verplaats de subformulieren Monitor_1 & Monitor_2 naar 0 twips vanaf boven
Code:
Private Sub Btn_Parameters_Click()
Dim lngH As Long
    lngH = Me.InsideHeight
    With Me.Frm_Parameters
        If .Visible = False Then
            .Visible = True
            .Height = 2000
            Me.Frm_Monitor_1.Move 0, 2000, 3795, 10000
            Me.Frm_Monitor_2.Move 3795, 2000, 3795, 10000
            Me.InsideHeight = 12500
        Else
            .Visible = False
            .Height = 0
            Me.Frm_Monitor_1.Move 0, 0, 3795, 12000
            Me.Frm_Monitor_2.Move 3795, 0, 3795, 12000
            Me.InsideHeight = 12500
        End If
    End With
End Sub

Als de code wat omslachtig is hoor ik het graag, maar wellicht dat iemand hier in het vervolg iets mee kan!
 
De code kan denk ik niet veel korter, al zou je de plek van de formulieren met (het simpelere) Top al kunnen instellen.
 
Wellicht:

Code:
Private Sub Btn_Parameters_Click()
    With Frm_Parameters
        .Visible = Not .Visible
        .Height = Abs(.Visible) * 2000
        Frm_Monitor_1.Move 0, .Height, 3795, 12000 - .Height
        Frm_Monitor_2.Move 3795, .Height, 3795, 12000 - .Height
'        Me.InsideHeight = 12500
    End With
End Sub

De insideheight lijkt me overbodig want in beide gevallen gelijk.
 
De code kan nog een heel stuk korter (weg namelijk) als je het parameterformulier onder de andere twee zet :D. Zelf vind ik formulieren met schuivende objecten lelijk; ik laat alles het liefst op zijn vaste plek staan. Dus bij mij zou het parameter formulier gewoon onderop staan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan