Toon posts:

[ VB ] Probleem met properties

Pagina: 1
Acties:

Verwijderd

Topicstarter
:) ,

Ik heb een probeem met een property van mijn usercontroll in VB. Het is een ingebouwd usercontrol ( in de standard exe ), en hij heeft al een paar properties. Nou wilde ik er eentje bijbouwen, maar die wordt gewoon niet opgeslagen. Hij reageert wel in design- time, maar als ik de property overal instel, 1000 x op 'save' druk, het project sluit en weer start, is ie de instelling gewoon leuk overal kwijt. Daar heb ik toch wel en beetje de :r van.

Ik gebruik gewoon propBag.ReadProperty en propBag.WriteProperty, maar heb geen idee wat er mis gaat. Iemand ook problemen hiermee? Of een oplossing voor me misschien?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 19:13

Crazy D

I think we should take a look.

In de property let 'PropertyChanged "propertynaam"' vergeten?

Exact expert nodig?


Verwijderd

Topicstarter
:?

Vertel is wat meer? Ik heb geen propertychanged property...
Snap ook niet wat je bedoeld. Maar zou het best kunnen zijn...

Verwijderd

In PropertyLet PropertyChanged "Naampje" gebruiken.

Over usercontrols:
http://www.vb-world.net/activex/controls2/index4.html

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 19:13

Crazy D

I think we should take a look.

Als je wilt dat wijzigingen van je properties onthouden worden, zul je in de property let de propertychanged functie moeten gebruiken. Deze zet een soort van 'isdirty' flag zodat later de properties gesaved worden.
Je read en write properties blijven gelijk, maar bij de property let moet je dan wat toevoegen:
code:
1
2
3
4
5
6
7
Public Property Get MijnProp() As String
    MijnProp = m_MijnProp
End Property
Public Property Let MijnProp(ByVal New_MijnProp As String)
    m_MijnProp = New_MijnProp
    PropertyChanged "MijnProp"
End Property

UserControl_ReadProperties en _WriteProperties blijven gelijk.

Zie ook bovengenoemde url, en anders kun je ook altijd nog de activex control interface wizard gebruiken :)

Exact expert nodig?


Verwijderd

Topicstarter
Crep, het klonk zo mooi, werd al helemaal *D , maar het werkt nog steeds niet. Hier is de property die maar niet wil:

Public Property Get enabledcontroll() As Boolean

enabledcontroll = mboolEnabled

End Property

Public Property Let enabledcontroll(boolenabled As Boolean)

mboolEnabled = boolenabled

cmbInfo.Enabled = mboolEnabled
txtInfo.Enabled = mboolEnabled
txtInfo.TabStop = mboolEnabled
cmbInfo.TabStop = mboolEnabled

If mboolEnabled Then
txtInfo.BackColor = &H80000005
cmbInfo.BackColor = &H80000005
Else
txtInfo.BackColor = &H8000000F
cmbInfo.BackColor = &H8000000F
End If

PropertyChanged ("enabledControll")

End Property

Private Sub UserControl_WriteProperties(PropBag As
PropertyBag)

PropBag.WriteProperty "EnabledControll", mboolEnabled, true

End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

On Error Resume Next
enabledcontroll = PropBag.ReadProperty("EnabledControll", mboolEnabled)

End Sub

Private Sub UserControl_InitProperties()

enabledcontroll = True

End Sub

Mijn controll zelf toont de property wel, en reageert ook goed als ik deze van true naar false verander, wordt alleen niet opgeslagen. Ook als ik run en terug kom in het project, staan ze allemaal weer op FALSE.

Ziet iemand wat ik fout doe??? :?

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 19:13

Crazy D

I think we should take a look.

Haal die On Error Resume Next eens weg in de readproperties? (of vang even af of er een error was...) misschien heeft die er iets mee te maken.... ziet er verder gewoon ok uit...

Exact expert nodig?


Verwijderd

Waarschijnlijk overbodig, maar heb je alle variablen ge-dim'ed?

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 16:17

johnwoo

3S-GTE

Op vrijdag 21 december 2001 15:21 schreef apottjewijd het volgende:
Crep, het klonk zo mooi, werd al helemaal *D , maar het werkt nog steeds niet. Hier is de property die maar niet wil:

[...]
Private Sub UserControl_WriteProperties(PropBag As
PropertyBag)

PropBag.WriteProperty "EnabledControll", mboolEnabled, true

End Sub
Deze doe je goed; je saved mboolEnabled onder de key "EnabledControll".
Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

On Error Resume Next
enabledcontroll = PropBag.ReadProperty("EnabledControll", mboolEnabled)

End Sub
[...]
Hier gaat het fout; je assignt de waarde in key "EnabledControll" aan de variabele enabledcontroll (en je gebruikt als default mboolEnabled). Dat klopt niet; enabledcontroll is hier gewoon een (ongedimde) lokale variabele. Probeer eens een van deze dingen:

1. Assign de opgehaalde waarde aan Me.enabledcontroll (hierdoor wordt je property let uitgevoerd; ik doe het altijd zo, dan weet je zeker dat eventuele benodigde code in de property let routine ook wordt uitgevoerd. Bij _WriteProperties roep ik trouwens ook altijd Me.Property aan ipv de interne variabele, weer om dezelfde reden.

2. Assign de opgehaalde waarde aan mboolenabled.

Bij allebei deze oplossingen moet je de default veranderen. Hou maar in je achterhoofd: zo'n default moet altijd een constante zijn. De property is dus of True, of False als default. Aangezien je in _WriteProperties True gebruikt zou ik dat hier ook doen ;)

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


Verwijderd

Topicstarter
Op vrijdag 21 december 2001 15:37 schreef CrazyD_at_work het volgende:
Haal die On Error Resume Next eens weg in de readproperties? (of vang even af of er een error was...) misschien heeft die er iets mee te maken.... ziet er verder gewoon ok uit...
Ja, option explicit staat ook aan, dus ik snap er echt helemaal niks meer van. Error handling staat nu ook uit. Geeft alleen ook helemaal geen error :'( Het rare is ook dat ik nog een paar property's op precies dezelfde manier behandel, en die doen het wel gewoon goed, dus snappen doe ik het echt niet.

Verwijderd

Topicstarter
Op vrijdag 21 december 2001 16:42 schreef johnwoo het volgende:

[..]

Deze doe je goed; je saved mboolEnabled onder de key "EnabledControll".
[..]

Hier gaat het fout; je assignt de waarde in key "EnabledControll" aan de variabele enabledcontroll (en je gebruikt als default mboolEnabled). Dat klopt niet; enabledcontroll is hier gewoon een (ongedimde) lokale variabele. Probeer eens een van deze dingen:

1. Assign de opgehaalde waarde aan Me.enabledcontroll (hierdoor wordt je property let uitgevoerd; ik doe het altijd zo, dan weet je zeker dat eventuele benodigde code in de property let routine ook wordt uitgevoerd.
Goeie tip, ik dacht dat m'n property let zo al werd uitgevoerd ( zonder me ervoor ), en had ook het idee dat dit werkte omdat dit voor de overige ook gewoon werkt...
Bij _WriteProperties roep ik trouwens ook altijd Me.Property aan ipv de interne variabele, weer om dezelfde reden.
Ook meteen aangepast...
2. Assign de opgehaalde waarde aan mboolenabled.
Dit wordt al in mijn property let gedaan toch?
Bij allebei deze oplossingen moet je de default veranderen. Hou maar in je achterhoofd: zo'n default moet altijd een constante zijn. De property is dus of True, of False als default. Aangezien je in _WriteProperties True gebruikt zou ik dat hier ook doen ;)
Ook aangepast. Heb nu ook een initPropertys gemaakt, maar het werkt nog steeds allemaal niet ;(

Maar in elk geval bedankt!

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 19:13

Crazy D

I think we should take a look.

Op vrijdag 21 december 2001 16:42 schreef johnwoo het volgende:
Hier gaat het fout; je assignt de waarde in key "EnabledControll" aan de variabele enabledcontroll (en je gebruikt als default mboolEnabled). Dat klopt niet; enabledcontroll is hier gewoon een (ongedimde) lokale variabele. Probeer eens een van deze dingen:
Je hebt gelijk over Me.property, maar uhmm ook in dit geval assignt ie de waarde aan de property, en niet aan een lokale variabele.
Tenzij de geplaatste code een niet letterlijke copy-paste is uit z'n code ;)

Exact expert nodig?

Pagina: 1