Toon posts:

[VB6] Events van buttons opvangen

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

Verwijderd

Topicstarter
Ik maak in een applicatie Dynamisch (at run time) buttons aan, aan de hand van enkele criteria. Dit gebreurt in een module, die ze vervolgens op een form zet.

Hoe kan ik in dat form de naam van de button opvragen, als er op geklikt wordt?

[samenvatmodus]
Dus ik wil, als er op een button geklikt wordt, de naam weten.
[/samenvatmodus]

Verwijderd

Activecontrol.name :?

Verwijderd

Topicstarter
En wanneer roep ik die dan aan? Wanneer er op de knop geklikt word, inderdaad :). Maar hoe weet ik dat er op de knop geklikt wordt?

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Oke maar hij maakt z'n buttons at run time aan dus waar vangt ie dan de click events af van die buttons?

It’s nice to be important but it’s more important to be nice


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Post anders eens de code die je gebruikt om die buttons aan te maken?

It’s nice to be important but it’s more important to be nice


Verwijderd

Topicstarter
he, dat was mijn vraag :)

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
If (iMaxInsertLength > 1000) Then
        Set ctrl = frmTemplate.Controls.Add("VB.CommandButton", "cmd" & tekst, frmTemplate)
        ctrl.Top = tekstPositieY%
        ctrl.Left = tekstpositieX% - 1500
        ctrl.Height = 300
        ctrl.Caption = "Edit XML"
        ctrl.Visible = True
    End If

Verwijderd

huh?!

Verwijderd

Topicstarter
wat huh

Verwijderd

't is praktisher denk ik als je ze gewoon met load aanmaakt..

Verwijderd

Topicstarter
vertel...

Verwijderd

code:
1
2
3
4
5
6
7
8
9
Private Sub Command1_Click(Index As Integer)
    Dim Idx As Integer
    Idx = Command1.Count + 1
    Load Command1(Idx)
    Command1(Idx).Visible = True
    Command1(Idx).Left = Rnd * 1000
    Command1(Idx).Top = Rnd * 1000

End Sub

zoiets ofzo, wel van command1 een control array maken ..

Verwijderd

Topicstarter
Ja, maar de control wordt niet in het formulier aangemaakt. Het formulier bestaat als template. Met 6 menu knoppen, een titel en voor de rest niets. Aan de hand van gegevens uit een database worden er tekstvakken en labels toegevoegd. Dit gebeurt allemaal in een module, voor de gebuiker dit te zien krijgt.

Er kan ook XML in een veld staan. Als dat zo is, is de veldlengte (in de DB) > 1000. Of is het eerste char een "<". Dan moet er een button voor komen te staan.

Nu wil ik dus graag in het formulier zelf weten wanneer er op die button geklikt is.

Verwijderd

right.. ik snap er geen ruk van ;) en ik ga naar huis dus succ6 :Y)

Verwijderd

Topicstarter
toch bedankt

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Kan je toch niet iets met een control array doen?
Alle controls in 1 control array hebben namelijk 1 click event.
Als je nou bijvoorbeeld 1 invisible button in je form plaatst en de buttons die je dynamisch add laat je onderdeel uit maken van het control array van die button (geef je dus dezelfde naam).?

It’s nice to be important but it’s more important to be nice


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 29-08 15:14

johnwoo

3S-GTE

Een control array is inderdaad de juiste oplossing. En Ber: je kunt dan ook gewoon van buiten de form controls aanmaken. Maak 1 onzichtbare knop (bijv. Command1) wiens Index property je op 0 instelt. Dan kun je de volgende functie in je form zetten:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function MakeButton(ByVal Caption As String, _
                           ByVal Left as Single, _
                           ByVal Top As Single, _
                           ByVal Width As Single, _
                           ByVal Height As Single) As CommandButton
   Static ButtonIndex As Long
   ButtonIndex = ButtonIndex + 1
   Load Command1(ButtonIndex)
   With Command1(ButtonIndex)
      .Caption = Caption
      .Move Left, Top, Width, Height
      .Visible = True
   End With
   Set MakeButton = Command1(ButtonIndex)
End Function


Deze functie maakt een knopje aan en geeft een reference ernaartoe terug. Je kunt er dan nog andere dingen mee uitspoken. Click events voor het knopje komen gewoon in de Command1_Click terecht, met de index van het betreffende knopje.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Verwijderd

Met jouw Controls.Add loop je tegen een van de minder leuke VB6 dingetjes aan. De code werkt perfect maar een enkele control kan maar werken. Voeg eens een enkele knop toe waarbij je ctrl als WithEvents declareer.
Private WithEvents ctrl as Button

Je kan nu dmv de dropdowns de events plaatsen voor deze button. En als jij de knop hebt aangemaakt worden deze events aangeroepen.

Zodra je meerdere knoppen wilt maken moet je of een heleboel WithEvents statements gaan plaatsen of een control array aanmaken (je kan geen withevents array maken). Dus de keuze voor de controlarray zoals hierboven aangegeven zul je moeten gebruiken!

Verwijderd

zoek ff op subclassing ... dan kun je de messages onderscheppen
Pagina: 1