[Access]Ander Formulier aanpassen

Pagina: 1
Acties:
  • 113 views sinds 30-01-2008
  • Reageer

  • jbvo
  • Registratie: November 2002
  • Laatst online: 22-08 09:30
Ik zal even de situatie uitleggen: er is een hoofdformulier, met een overzicht van de data en met mogelijkheden om data aan te passen, te verwijderen en toe te voegen. Voor die bewerkingen zijn soms andere formulieren nodig, zoals voor het invoeren van nieuwe data. Nu heb ik voor het wijzigen en invoeren van data een (1) formulier gemaakt, maar dit formulier kan met 2 verschillende knoppen benaderd worden, namelijk "Wijzigen" en "Toevoegen", omdat hiervoor gewoon exact dezelfde velden, knoppen en methodes nodig zijn. Nu wilde ik echter vanuit het hoofdformulier er voor zorgen, dat zodra "Wijzigen" aangeklikt wordt, dit formulier geopend wordt en de Caption en Height van een knop op het 2e form aan te passen. Als ik dit doe verdwijnt de knop echter.

Wat is nu de beste methode om een ander formulier te beinvloeden?


Ik heb overigens nog een vraagje: hoe kan ik controleren of een bepaald formulier geopend is?

Overigens heb ik wel enige kennis van VBA, dus dat is geen probleem

[ Voor 7% gewijzigd door jbvo op 23-05-2005 10:40 ]


  • kippy
  • Registratie: September 2004
  • Laatst online: 01:39
Het is erg handig als je even de code die je hiervoor gebruikt post, zo kunnen we je niet goe helpen.

Al eens gedacht aan:
code:
1
If naamform.Visible = true then


dan kan je achterhalen of een form openstaat of niet

  • jbvo
  • Registratie: November 2002
  • Laatst online: 22-08 09:30
kippy schreef op maandag 23 mei 2005 @ 10:41:
Al eens gedacht aan:
code:
1
If naamform.Visible = true then


dan kan je achterhalen of een form openstaat of niet
Volgens mij moet een form eerst open staan, voor je een eigenschap kan checken of veranderen. Op de manier die jij aangeeft krijg je toch een error? Ik zal het zometeen wel even proberen.

code:
1
2
3
DoCmd.OpenForm "frmEenPlaats"
Form_frmEenPlaats.Nieuw.Height = 1
Form_frmEenPlaats.Nieuw.Caption = "Nog een nieuwe plaats maken"


Het subform heet frmEenPlaats en de knop heet Nieuw.
Ik merk nu zelf op dat ik wellicht een verkeerde eenheid gebruik bij Height 8)7

[ Voor 27% gewijzigd door jbvo op 23-05-2005 10:54 ]


  • kippy
  • Registratie: September 2004
  • Laatst online: 01:39
in word en excel gaat dat met VBA perfect, zelfs al de window nog nooit is geopend.

ja een hight van 1px is niet al te veel....

[ Voor 23% gewijzigd door kippy op 23-05-2005 11:01 ]


  • jbvo
  • Registratie: November 2002
  • Laatst online: 22-08 09:30
kippy schreef op maandag 23 mei 2005 @ 10:57:
ja een height van 1px is niet al te veel....
Maar wat nu als ik de height in cm aan wil geven, zoals ik dat tot nu toe overal heb gedaan?

Edit: Je hebt inderdaad gelijk, als ik een groter getal aangeef, wordt de knop wel zichtbaar, maar ik wil eigenlijk gewoon de grootte aangeven in cm. Ik heb nu een andere oplossing voor mijn probleem:
code:
1
2
3
DoCmd.OpenForm "frmEenPlaats"
Form_frmEenPlaats.Nieuw.Height = Form_frmEenPlaats.Nieuw.Height * 2
Form_frmEenPlaats.Nieuw.Caption = "Nog een nieuwe plaats maken"


Dit werkt, omdat de hoogte gewoon 2 keer zo groot moet worden voor een extra regel.

[ Voor 50% gewijzigd door jbvo op 23-05-2005 11:12 ]


  • kippy
  • Registratie: September 2004
  • Laatst online: 01:39
geen idee hoe het in cm moet......, maar is het dan een probleem om 1 cm of 24 px in te moeten voeren.

Dus: button.hight = 24

lijkt me niet echt een probleem.

  • jbvo
  • Registratie: November 2002
  • Laatst online: 22-08 09:30
Ik heb al iets meer info gevonden:
In Visual Basic, use a numeric expression to set the value of this property. Values are expressed in twips (twip: Unit of measurement that is equal to 1/20 of a point, or 1/1440 of an inch. There are 567 twips in a centimeter.).
Handig...nog een eenheid erbij :/

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Standaard rekent Access in 'Twips'. Er gaan 567 Twips in een centimeter...
Mooier is het als je gebruik maakt van ScaleMode om vervolgens scaleheight en scalewidth in cm op te geven.

Controleren of een formulier open is:
Quick 'n' Dirty:
Functie die formulier probeert te benaderen met in-line error checking:
IsOpen=(error =0)

Officieel:
In het volgende voorbeeld ziet u hoe u de functie SysCmd kunt gebruiken met acSysCmdGetObjectState voor het argument actie om de status van het actieve databaseobject vast te stellen.

Dim intObjType As Integer, strObjNaam As String, intObjStatus As Integer

intObjType = Application.CurrentObjectType
strObjNaam = Application.CurrentObjectName
intObjStatus = SysCmd(acSysCmdGetObjectState, intObjType, strObjNaam)

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • jbvo
  • Registratie: November 2002
  • Laatst online: 22-08 09:30
Het werk heeft nu een aantal maanden stil gelegen, maar sinds gisteren ben ik weer verder aan het werken. Nu kwam ik nog een probleem tegen dat ook te maken heeft met het wijzigen van een formulier vanuit VBA.

Zoals hierboven al beschreven beinvloed ik de formulieren op de volgende manier:
Visual Basic:
1
2
3
4
DoCmd.OpenForm "frmEenPlaats"
Form_frmEenPlaats.Caption = "Nieuwe Plaats Maken"
Form_frmEenPlaats.OK.Caption = "Aanmaken"
Form_frmEenPlaats.Plaats.SetFocus


Maar nu probeer ik hetzelfde in dezelfde module met een ander formulier, maar nu werkt het niet. Geen van de volgende wijzigingen word doorgevoerd, geen titels worden aangepast en ook geen tekstvelden ingevoerd. Zelfs de focus komt niet in het vak Lengte.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DoCmd.OpenForm "frmMeerPlaatsen"
With Form_frmMeerPlaatsen
    .btnAanmaken.Visible = False
    .btnWijzigen.Visible = True
    .Caption = "Plaatsen Wijzigen"
    .Plaats.Value = Plaats
    .Plaats.Locked = True
    .IndexVan.Value = Van
    .IndexVan.Locked = True
    .IndexTot.Value = Tot
    .IndexTot.Locked = True
    If Lengte >= 0 Then
        .Lengte.Value = Lengte
    Else
        .Lengte.Value = Null
    End If
    .Lengte.SetFocus
End With


Ik zat zelf te denken aan bepaalde eigenschappen die verkeerd ingesteld zouden staan bij het formulier MeerPlaatsen en dat die bij EenPlaats wel goed zouden staan, maar ik heb tot nu toe niets kunnen vinden.
Zou iemand misschien weten wat ik hier fout doe?

[ Voor 3% gewijzigd door jbvo op 28-08-2005 17:26 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 00:09

Boss

+1 Overgewaardeerd

Ik zou het anders aanpakken. Op zich is het code-technisch namelijk niet zo netjes om al die eigenschappen van het te openen formulier aan te passen vanuit een ander formulier.

Je hebt dus formulier X, wat je voor twee doelen gebruikt: wijzigen en toevoegen. Als je dat formulier nu aanroept, en daarbij een OpenArgs meegeeft die bijvoorbeeld "nieuw" of "wijzig" is, en dan bij de OnOpen event van dat formulier via
Visual Basic:
1
2
3
4
5
6
Select case OpenArgs
  Case "nieuw"
    'alle properties instellen voor nieuw
  Case "wijzig"
    'alle properties instellen voor wijzig
End Select

dan kan je later ook nog eens dat formulier vanaf een andere plek aanroepen zonder dat je dan opnieuw al die instellingen moet overnemen.

En natuurlijk is je hele probleem van verwijzen naar een formulier dat wel/niet bestaat meteen opgelost.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.

Pagina: 1