VB Usercontrol en classes

Pagina: 1
Acties:

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Ik ben een usercontrol aan het maken met allerlei properties en een aantal classfiles. Nu wil ik graag vanuit de class file de usercontrol benaderen en de objecten die daar opstaan aanpassen (vb text1.text= "bla"). Hoe krijg ik dit voor elkaar. Ik kom er niet achter en ik kan nergens iets vinden.

Zo zit een beetje de stuctuur in elkaar:

Usercontrol:
heeft een textbox, genaamd text1
code:
1
2
3
4
5
6
7
Public Property Get Items() As clsItems
' some code
End Property

Public Property Let Items(ByVal vNewValue As clsItems)
' some code
End Property

clsItems:
code:
1
2
3
4
5
6
7
public function Add(strName as string)

'add item code

>>>>!!!! Hier wil ik graag usercontrol.text1.text aanpassen....!!!!!<<<<<

end function

Hoe krijg ik dit voor elkaar???

Verwijderd

Ik ga je niet helemaal de code voorschrijven nu, maar je clsItems moet je usercontrol kennen, dit moet je dus doorsturen.

Verwijderd

Omdat er toch wat moeilijkheden inzitten, hier maar wat code:
code:
1
2
3
4
5
Dim m_objMyUserControl As Object

Public Property Set MyUserControl(objUserControl as Object)
    Set m_objMyUserControl = objUserControl
End Property

Nadat je een class hebt aangemaakt in je UserControl moet je dus eerst even aanroepen: Set clsNogWat.MyUserControl = Me
In je clsNogWat kan je dan m_objMyUserControl gebruiken, dus m_objMyUserControl.Text1.Text = "Doet ie het?"

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Ik krijg op bovenstaande een foutmelding:
"Object doesn't support this property or method"

Ik heb een set property gemaakt in mijn class die ik vanuit mijn usercontrol aanroep en dus set objcontrol=me doe.

vervolgens wil ik vanuit mijn class objusercontrol.Text1.Text ="kk" doen maar krijg dan bovenstaande foutmelding.

Wat doe ik verkeerd?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09-09 16:14

Crazy D

I think we should take a look.

Wat wil je doen met die control en class?
De indruk die ik krijg is dat je class een array/collectie is/wordt van regels, en dat je als er wat tekst wordt toegevoegt, deze meteen in de textbox op je usercontrol wordt toegevoegt?
Waarom maak je die class dan niet een private variabele in je usercontrol, en een Add functie in je usercontrol, waar je dan de tekst in die collectie/array zet, en meteen je textbox update?
Als je wilt dat die class wel te gebruiken is, zou je 'm op Public Not Creatable (oid) kunnen zetten, zodat er wel een reference naar te krijgen is in de form, maar dat ie buiten je control om niet te gebruiken is.

Gewoon een vrijdagochtend hersenspinsel... ;)

Exact expert nodig?


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Ik ben met een usercontrol bezig waarin ik de volgende structuur kan krijgen vanuit een applicatie waar ik de ocx op plaats:
code:
1
usrControl.Items.Add()

Dit krijg ik allemaal wel voor elkaar door classes, maar ik wil vanuit die add functie een object op het usercontrol aanpassen (een picbox)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09-09 16:14

Crazy D

I think we should take a look.

Op vrijdag 26 april 2002 10:59 schreef NTGiant het volgende:
Ik ben met een usercontrol bezig waarin ik de volgende structuur kan krijgen vanuit een applicatie waar ik de ocx op plaats:
code:
1
usrControl.Items.Add()

Dit krijg ik allemaal wel voor elkaar door classes, maar ik wil vanuit die add functie een object op het usercontrol aanpassen (een picbox)
UserControl.AddItem ? :)

Maar ja het principe zoals het hierboven al staat moet werken...

class:
code:
1
2
3
4
5
Private m_Control As MyUserControl

Public Property Let deUserControl(ByRef New_Value As MyUserControl)
    m_Control = New_Value
End Property

En aanroepen vanuit de control als
Set m_ItemsClass.deUserControl = Me

I.p.v. public zou je 'm Friend kunnen maken, zodat ie (als ie uiteindelijk in een ocx terecht komt) alleen vanuit de control aan te roepen is, en niet vanuit de form.

Exact expert nodig?


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Als ik dat doe ik krijg ik method or data member not found.

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09-09 16:14

Crazy D

I think we should take a look.

Als je de variabele als MyUserControl dimt i.p.v. als Object, krijg je die error dan nog steeds?
En als je "ergens" in die class je m_UserControl. intiept, krijg je dan netjes een dropdownlijstje (intellisense)?

Exact expert nodig?


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
als ik doe:
code:
1
2
3
4
5
dim objControl as UserControlName

...

objControl.text1.text = ""

krijg ik een lijstje te zien met property's, maar dan alleen die ik heb aangemaakt. Niet de objecten op het usercontrol.

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
'=====Class=====
Dim m_objUC As UserControl1

Public Property Set MyUserControl(objNewValue As UserControl1)
    Set m_objUC = objNewValue
End Property

'=====UserControl=====
Private Sub UserControl_Initialize()
Dim objclass As New Class1
    Set objclass.MyUserControl = Me
End Sub

Vlug even ingetiept...
Inderdaad, als je late-binding toepast (Dim As Object), dan werkt het blijkbaar niet. Misschien dat iemand daar een verklaring voor heeft, maar ik helaas niet.
Excusses voor het ongemak.

[edit]
Ook ik krijg alleen de zelfgemaakte properties van het usercontrol. Als ik echter in mijn direct-venster "MsgBox m_objUC.Name" intiep, dan krijg ik wel de naam... :?
Het is veel werk natuurlijk, maar anders moet je de properties die je gebruikt opnieuw zelf definieren...

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
dat geeft niet, maar ik vind het vreemd dat ik het op geen enkele manier aan de praat krijgt.
Het zal toch op een of andere manier moeten werken...

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 09-09 16:14

Crazy D

I think we should take a look.

Hmmpf wazig, ik dacht echt dat ik zoiets al een keer gedaan had, maar het werkt hier ook niet :?
Nah t zal wel aan de vrijdag liggen of zo :P

Exact expert nodig?


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Dat zou ik inderdaad wel kunnen doen: een friend propery maken en dat gedeelte opnieuw schrijven.

even voor mij zelf: friend property's zijn alleen binnen je ocx te zienb, en niet voor je prog die gebruik maakt van je ocx, toch????

Verwijderd

Friend (Optional)
Used only in a class module. Indicates that the Property Let procedure is visible throughout the project, but not visible to a controller of an instance of an object.

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
ok thanx, kan ik btw friend ook gebruiken in een usercontrol om een property alleen vanuit een class te gebruiken?
Pagina: 1