Toon posts:

[VB6] User-controls aanmaken tijdens runtime

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende probleem:

In mijn applicatie wil ik een lijst maken; LijstManager; wat een UserControl is. Daarbinnen heb ik dan lijstitems; LijstItem; ook een usercontrol want hier gaan allemaal frutsels op staan wat je niet met een gewone lijst op kan lossen. Zo'n LijstManager zet ik dan op het form, maar die LijstManager moet tijdens de runtime dus LijstItem's aan kunnen maken om daarmee de lijst te gaan vullen dus. De vraag is dus: hoe doe je dat ?!

Ik heb al geprobeerd om het op dezelfde manier te doen zoals je een class module aanmaakt (Dim aars As New LijstItem) Maar dat resulteert in een "Invalid use of New keyword". Een "Dim aars As LijstItem" (zonder New) kan wel, maar dan maakt ie het object niet aan. Hoe kan ik dit oplossen?
Of is het mogelijk om een Class Module tevens zichtbaar te maken?

[ Voor 7% gewijzigd door Verwijderd op 30-03-2005 23:34 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:44

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ja, maar dat zijn de standaard objecten. Daar waar VB6 wel 'As New Label' slikt. Bij de User-Controls geeft ie pas problemen

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:44

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op woensdag 30 maart 2005 @ 23:51:
Ja, maar dat zijn de standaard objecten. Daar waar VB6 wel 'As New Label' slikt. Bij de User-Controls geeft ie pas problemen
A Control object is a good example of this. If abstracted from the form that contains it, a Control object is worse than useless; it will worsen our application's performance without providing any tangible benefit. As a result, Control objects are not creatable. That is, code such as

Dim oTxtName As New TextBox

or

Dim oTxtName As TextBox
Set oTxtName = New TextBox

will not succeed in creating a new textbox control; instead, it generates the compiler error, "Invalid use of New keyword."

When objects are not createable, the most common method of instantiating a new object of that type is to call a method belonging either to its parent object or to its container object. In the case of a Control object, since the object belongs to the Controls collection, you instantiate a new control and retrieve a reference to it by calling the Controls collection's Add method. Its syntax is: (Click here for code example)
Dat staat ook in het artikel genoemd :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Oei, ik zat te haastig naar de oplossing te zoeken zodat ik dat over het hoofd zag. Ik denk dat het maar eens tijd is om over te stappen op een andere taal, ik zit te denken aan C-Scherp of gewoon C++

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Het kan wél gewoon hoor :?

Plemp op je form een textbox (txtBox1), zet de name property op myTxtBox en zet het index property op 0 en paste de volgende code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form_Load()
    Dim T As Long
    
    For T = 1 To 10
        Load myTxtBox(T)
        myTxtBox(T).Text = ""
        myTxtBox(T).Visible = True
        myTxtBox(T).Move 100, T * 350, 3000, 275
    Next
    myTxtBox(0).Visible = False 'Of positioneer 'm ook als je wil...
End Sub

Private Sub myTxtBox_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
    Debug.Print "Keydown in Textbox: " & Index & ", inhoud: " & myTxtBox(Index)
End Sub

F5 meppen et voila.

Je gebruikt/misbruikt dus gewoon een control-array. Of je dit nou met een textbox doet of een willekeurige ander (user)control, je dient er minimaal 1 op je form te hebben staan (visible of niet, wat jij wil) en van alle nieuwe controls die je load dien je minimaal even het .visible property op true te zetten in je code.

[ Voor 14% gewijzigd door RobIII op 31-03-2005 04:01 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 07-05 15:06

sopsop

[v] [;,,;] [v]

Je kunt ook zonder een controlarray te gebruiken controls aanmaken, from scratch that is:
Zie hier: http://www.vb-helper.com/howto_add_controls_scrolled.html

Of beter nog (beide methodes): http://www.johnsmiley.com...e/smiley007/smiley007.htm

Verwijderd

Topicstarter
http://support.microsoft.com/kb/188577/EN-US/

Toppie, dit werkt! Maar dit werkt alleen als je er een 2e Active-X Control project naast hebt staan, dus krijg je zo'n ocx bestandje erbij :(

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
:?
Is dat wel de juiste url? Dat gaat volgens mij over heel iets anders?
Wat is er mis met mijn voorbeeld? Dat werkt gewoon prima...

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
URL werkt hier gewoon. In jouw url's stond wel hoe je objecten aanmaakt, maar niet usercontrols.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 31 maart 2005 @ 19:51:
URL werkt hier gewoon. In jouw url's stond wel hoe je objecten aanmaakt, maar niet usercontrols.
:? :?
Ik heb geen URL gepost, maar kant-en-klare code :?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
Oh mijn reply was voor de bovenstaande reply. bij jouw code moet er dus altijd al een object staan, maar het werkt wel ja. Thnx
Pagina: 1