Toon posts:

[VB6]Usercontrol die andere usercontrol aanroept

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met een probleem in VB6:

Mijn programma bestaat uit 3 usercontrols:

Link | Midden | rechts

De midden Uc is opgedeeld uit midden_1,midden_2 & midden_3

in Links staan een aantal knoppen adv welke knop hier is geselecteerd moet de juiste midden_nr worden geladen.

Maar hoe kan ik vanuit de UC Links een UC Midden aanspreken en Visible maken?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Raise wat events in je usercontrols, geef ze wat methods en knoop ze in het parent control aan elkaar met wat code :?
Ik zie het probleem niet.
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
Private Sub UserControlLinks_SomeEvent(SomeData as String)
  Dim I as integer, T as integer
  Select case SomeData
    case "blabla":     I = 0
    case "jeddajedda": I = 1
    case "foobar":     I = 2
  End Select
  For T = 0 to 2
    UserControlMidden(T).Visible = T = I
  Next
End Sub

[ Voor 116% gewijzigd door RobIII op 12-10-2005 11:20 ]

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
RobIII schreef op woensdag 12 oktober 2005 @ 11:15:
Raise wat events in je usercontrols, geef ze wat methods en knoop ze in het parent control aan elkaar met wat code :?
Ik zie het probleem niet.
Visual Basic 6:
1
2
3
4
5
6
7
8
9
10
11
Private Sub UserControlLinks_SomeEvent(SomeData as String)
  Dim I as integer, T as integer
  Select case SomeData
    case "blabla":     I = 0
    case "jeddajedda": I = 1
    case "foobar":     I = 2
  End Select
  For T = 0 to 2
    UserControlMidden(T).Visible = T = I
  Next
End Sub
Sorry maar dat begrijp ik niet.

Bij het klikken op de knop knop_click (in de linker usercontrol) moet er een andere uc visible worden gemaakt.

Midden_1.visible=true

Het probleem is echter dat hij in die linkerUsercontrol Middel_1 niet kent om een of andere reden, dus hoe kan ik dat doen?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op woensdag 12 oktober 2005 @ 11:23:
[...]
Het probleem is echter dat hij in die linkerUsercontrol Middel_1 niet kent om een of andere reden, dus hoe kan ik dat doen?
Dat is ook helemaal de bedoeling niet. ;)

Wat RobIII schrijft. Je ene usercontrol genereert een event, en in de container (het parent formulier) wordt daarop gereageerd door bv een andere control op visible te zetten. Het kale stramien:

In usercontrol zelf
Visual Basic:
1
2
3
4
5
Public Event ButtonClicked(index as integer)

Sub MyButton_click()
     RaiseEvent ButtonClicked(1)
End Sub


En in het formulier:
Visual Basic:
1
2
3
Sub UserControlLeft_Buttonclicked(index as integer)
       UserControlCentral(index).visible=true
End Sub

[ Voor 32% gewijzigd door Lustucru op 12-10-2005 11:48 ]

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


Verwijderd

Topicstarter
Maar ik kan in die linkeruc toch geen click event opvange ?

ik denk dat ik het niet goed begrijp

  • compufreak88
  • Registratie: November 2001
  • Laatst online: 02-05-2025
Je hebt er dus ook een parent control voor nodig die die event van de ene Uc opvangt, en doorgeeft aan de andere.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class parent
    dim withevents L as new Links
    dim R as new Rechts
    private class Links
        event ButtonClicked
        sub Button_Click
            raiseevent ButtonClicked
        end sub
    end class
    private class Rechts
        sub DoSomething
            msgbox("Done")
        end sub
    end class
    sub L_ButtonClicked
        r.DoSomething
    end sub
end class


dit is pseudo vb/vb.net code

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Het is heel simpel:
[list=1]
• Je laat het linker usercontrol een event genereren (declareer het event met "Public Event MyEvent(SomeData as string)"
• In het usercontrol, bij het click event van een button ofzo (waar je dus op wil reageren) raise je je eigen event: RaiseEvent MyEvent("blaat")
• In het parent control (dus het form waar je usercontrol op ligt) heb je nu een event MyControl_MyEvent(SomeData as string). Daar gooi je een MsgBox in
• Je usercontrol werkt nu net als een gewone button ofzo. Zoals je een MyButton_Click event hebt, heb je nu een MyControl_MyEvent event. IN de event handler ga je je andere controls en/disablen enzo


De controls horen helemaal niet van elkaars bestaan te weten, daarvoor heb je het parent (of containing) control (je form dus waarschijnlijk). Die knoopt alles aan elkaar.
Stel het je zo voor: Als je een button op je form gooit, en je wil dat er iets gebeurt als je er op klikt, dan moet je ook in het _Click event code gaan stoppen. De button zélf weet ook niet van het bestaan van eventuele andere controls op je form*.

* Uitzonderingen met "buddy-controls" etc. daargelaten (en dan nog werken die door expliciet te setten wat het buddy control is, en niet door het op 1 of andere manier "magisch" te weten).

[ Voor 42% gewijzigd door RobIII op 12-10-2005 12:27 ]

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

Pagina: 1