Springen naar inhoud


- - - - -
VS 2012

Usercontrols

VS2012

  • Log in a.u.b. om te beantwoorden
Er zijn 11 reacties in dit onderwerp

#1 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 318 berichten
    Laatst bezocht 06 Oct 2014 20:18

Geplaatst op 07 March 2013 - 18:31


Hallo,

Ik heb een groep met usercontrols.

Wat ik zou willen is aan een globale een waarde te geven die in alle usercontrols gebruikt wordt.

Dus bv.

Ik heb 2 usercontrols

MyButton
MyText

Deze gebruiken beide de global variable "Main"
In mijn programma zet ik dan.

General.Main = [object]

Ik hoop dat dit duidelijk is.

Ludi

#2 Hypenate

Hypenate

    Guru Developer

  • Moderators
  • 1200 berichten
    Laatst bezocht gisteren, 10:12
  • LocatieSint-Truiden
Inzender

Geplaatst op 07 March 2013 - 19:00

In je project een Module toevoegen (zoals je een form/klasse toevoegt)
En dan plaats je daarin:

Visual Basic Code:
Property Main As Object

1. Lees zeker onze huisregels en gebruik code-tags indien nodig
2. Indien je vraag correct beantwoord is, gelieve dit te melden in de post
-
3. We zijn allemaal vrijwilligers, keep it cool

#3 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 318 berichten
    Laatst bezocht 06 Oct 2014 20:18

Geplaatst op 07 March 2013 - 20:02

Dit werkt niet want de module is niet bereikbaar.

#4 Hypenate

Hypenate

    Guru Developer

  • Moderators
  • 1200 berichten
    Laatst bezocht gisteren, 10:12
  • LocatieSint-Truiden
Inzender

Geplaatst op 07 March 2013 - 21:34

Een module is toch bereikbaar over een hele project?
Zeker dat je een module toevoegt en niets anders? (Don't hit me ^_^ )
Visual Basic Code:
Public Module Module1
	Private _Foo As Integer
	Property Foo as Integer
End Module

1. Lees zeker onze huisregels en gebruik code-tags indien nodig
2. Indien je vraag correct beantwoord is, gelieve dit te melden in de post
-
3. We zijn allemaal vrijwilligers, keep it cool

#5 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 318 berichten
    Laatst bezocht 06 Oct 2014 20:18

Geplaatst op 08 March 2013 - 00:05

Het klopt dat in een project elke module beschikbaar is. Maar omdat ik meerdere usercontrols heb is dit gemaakt in een Control library (dll). In deze Control library zitten bij mij een aantal usercontrols die door het gehele project meervoudig gebruikt worden.
Als ik bijvoorbeeld de usercontrol "MyButton" gebruik dan kan ik d.m.v. van dit usercontrol de module bereiken. En kan de globale variabelen zetten.
Maar dat is niet wat ik wil. Wat ik ook kan doen is een lege usercontrol aanmaken bv Gerenal waarmee ik de globale variabelen kan zetten die gebruikt kunnen worden voor elke usercontrol. Maar wil ik de usercontrol MyButton gebruiken dan moet de usercontrol General ook op het form komen. Dit werkt maar vindt ik geen mooie oplossing.

#6 Benno

Benno

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 10 Aug 2014 13:16
  • LocatieGyor, Magyarország

Geplaatst op 09 March 2013 - 01:38

Ik zie het probleem niet zo.

Maar het is me ook niet helemaal duidelijk:
  • waar precies moet die globale variabel bereikbaar zijn
  • waar precies komt die waarde vandaan?
  • wat is het type van die waarde?
  • waar precies wil je die globale variabele declareren?

Dit is een "probleem" dat typisch opgelost wordt met inversion of control / dependency injection.
Als je je vraag wat concreter kan maken heb ik wel een bruikbaar antwoord.

#7 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 318 berichten
    Laatst bezocht 06 Oct 2014 20:18

Geplaatst op 09 March 2013 - 21:05

Bericht bekijkenBenno, op 09 March 2013 - 01:38, zei:

Ik zie het probleem niet zo.

Maar het is me ook niet helemaal duidelijk:
  • waar precies moet die globale variabel bereikbaar zijn
  • waar precies komt die waarde vandaan?
  • wat is het type van die waarde?
  • waar precies wil je die globale variabele declareren?
Dit is een "probleem" dat typisch opgelost wordt met inversion of control / dependency injection.
Als je je vraag wat concreter kan maken heb ik wel een bruikbaar antwoord.

waar precies moet die globale variabel bereikbaar zijn : In alle usercontrols.
waar precies komt die waarde vandaan: dll
wat is het type van die waarde: Object
waar precies wil je die globale variabele declareren: In de een module van de Control library.

Anders misschien ik heb een Control library, AllinOne, waarin meerdere usercontrols bv MyButton en MyText zitten.
De usercontrols worden op het form gekopieerd.

Visual Basic Code:
 Private Sub frmOrders_Load(sender As Object, e As EventArgs) Handles MyBase.Load

		 MyButton.SetObj(cMain, cMOrders)
		
End Sub

Hierboven zie je hoe ik het gedaan heb. Het form heeft een usercontrol Mybutton. Maar aan de usercontrols moeten twee objecten worden door gegeven, cMain en cMOrders.

Visual Basic Code:
Public Class MyButton

	 Public Sub SetObj(_cMain As Object, _objclass As Object)
		 ObjClass = _objclass
		 cMain = _cMain
	 End Sub
End Class


Visual Basic Code:
Module ModGlobal

	 Public m_ObjClass As Object
	 Public m_ObjMain As Object

End Module

Wat ik in niet "fijn" vindt is dat ik de beide objecten in Mybutton.setObj moet doorgeven.Zeke r als ik deze niet nodig heb. Dan zou ik de ander usercontrol Mytext.setobj moeten aanmaken. Het liefs zou ik dat op een plaats willen doen.

#8 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 318 berichten
    Laatst bezocht 06 Oct 2014 20:18

Geplaatst op 09 March 2013 - 21:15

Oeps fout gemaakt in het kopieren.

Visual Basic Code:
Module ModGlobal

Public m_ObjClass As Object
Public m_ObjMain As Object

Public mbGeneralLoaded As Boolean
Public sErrPla_id As String


Public Property bGeneralLoaded As Boolean
Get
If mbGeneralLoaded Then
Else
Debug.Print("General is not Set")
End If
Return mbGeneralLoaded
End Get
Set(value As Boolean)
mbGeneralLoaded = value
End Set
End Property

Public Property cMain As Object
Get
If IsNothing(m_ObjMain) Then
m_ObjMain = New Object
End If
Return m_ObjMain
End Get
Set(value As Object)
m_ObjMain = value
End Set
End Property

Public Property ObjClass As Object
Get
If IsNothing(m_ObjClass) Then
m_ObjMain = New Object
End If

Return m_ObjClass
End Get
Set(value As Object)
m_ObjClass = value
End Set
End Property

End Module

De modglobal was niet compleet.

#9 Johnny

Johnny

    Senior Developer

  • Leden
  • PipPipPip
  • 184 berichten
    Laatst bezocht vandaag, 11:33

Geplaatst op 09 March 2013 - 22:11

Als ik het goed begrijp, waarom zet je je Globale niet in je form_load:

Code:
Private Sub frmOrders_Load(sender As Object, e As EventArgs) Handles MyBase.Load
   ObjClass = cMain
   cMain = cMOrders
 
'MyButton.SetObj(cMain, cMOrders)
  
End Sub

Public Class MyButton
  Public Sub SetObj(_cMain As Object, _objclass As Object)
   'ObjClass = _objclass
   'cMain = _cMain
  End Sub
End Class



#10 Benno

Benno

    Master Developer

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 10 Aug 2014 13:16
  • LocatieGyor, Magyarország

Geplaatst op 10 March 2013 - 00:00

.Ja. :)
Ik begrijp ook nog steeds niet waarom dat een probleem zou opleveren.

#11 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 318 berichten
    Laatst bezocht 06 Oct 2014 20:18

Geplaatst op 11 March 2013 - 22:19

Het is ook geen probleem maar ik moet zoveel mogelijk vb6 vermijden en op de manier van vb 2012 gaan programmeren.

#12 Ludi

Ludi

    Professional Developer

  • Leden
  • PipPipPipPip
  • 318 berichten
    Laatst bezocht 06 Oct 2014 20:18

Geplaatst op 11 March 2013 - 23:49

En dat lukt niet altijd.





Ook met taq VS 2012, VS2012 voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2012] Untitled 1

Hosting provided by Combell
Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
vbib.be - vbnet.be - vbdotnet.be - visualbasic.be