[VB 2008] Combobox met items gebruiken op meerdere forms

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb op dit moment een applicatie met daarin meerdere schermen.

Op deze schermen staan een aantal comboboxes die ik vul met data uit een database.
Op dit moment laat ik bij de formload elke keer de combobox vullen door de datasource uit te lezen en dan de items 1 voor 1 toe te voegen. Dit kost veel tijd bij het laden van het betreffende form.

Nu is mijn bedoeling om de combobox 1 keer te laden bij het opstarten van de applicatie en dan bij het opstarten van het desbetreffende form de combobox te kopieren van de combobox die bij het opstarten is geladen.

Ik heb nu zelf al een public combobox (cmbTest) aangemaakt die wordt geladen bij het starten van het form.
Wanneer ik dan later combobox1 = cmbTest doe wordt combobox1 niet gevuld.

Is er iemand die hiervoor een oplossing weet? Het zou echt heel veel tijd schelen als ik dit kan oplossen. Ik heb al een lange tijd gezocht, maar kan er nog steeds geen oplossing voor vinden.

Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 17-09 18:39

Matis

Rubber Rocket

Je zou je cmbTest toch kunnen overerven vanuit je eerste Form?

Iets in de trant van:
Wikipedia: Singleton pattern

[ Voor 48% gewijzigd door Matis op 10-11-2009 10:00 ]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Je kan ook altijd nog je Items in een tijdelijke array dumpen en dan naar je andere combobox zetten:

code:
1
2
3
4
        Dim Temp(ComboBox1.Items.Count - 1) As Object
        ComboBox1.Items.CopyTo(Temp, 0)

        ComboBox2.Items.AddRange(Temp)


Ow trouwens, ik zou eens kijken naar de mogelijkheden van "Data bound objects"
Wordt door VS2008 prima ondersteund. Hiermee kan je eenvoudig en super effectief data van een dataset naar objecten krijgen.

[ Voor 28% gewijzigd door Armageddon_2k op 10-11-2009 10:14 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Armageddon_2k schreef op dinsdag 10 november 2009 @ 10:12:
Je kan ook altijd nog je Items in een tijdelijke array dumpen en dan naar je andere combobox zetten:

code:
1
2
3
4
        Dim Temp(ComboBox1.Items.Count - 1) As Object
        ComboBox1.Items.CopyTo(Temp, 0)

        ComboBox2.Items.AddRange(Temp)
DIt heb ik al eens gedaan, maar de addrange is net zo traag als alle items los toevoegen via items.add

Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Verwijderd schreef op dinsdag 10 november 2009 @ 10:13:
[...]


DIt heb ik al eens gedaan, maar de addrange is net zo traag als alle items los toevoegen via items.add
Je had het over meerdere form hea?
Zie je die forms ook op hetzelfde moment? of liggen ze over elkaar heen?
Anders zou je het kunnen oplossen door de .Parent van de combobox naar het andere form te gooien.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Armageddon_2k schreef op dinsdag 10 november 2009 @ 10:15:
[...]


Je had het over meerdere form hea?
Zie je die forms ook op hetzelfde moment? of liggen ze over elkaar heen?
Anders zou je het kunnen oplossen door de .Parent van de combobox naar het andere form te gooien.
Meestal zie je ze tegelijkertijd.

[ Voor 3% gewijzigd door Verwijderd op 10-11-2009 10:18 ]


Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Verwijderd schreef op dinsdag 10 november 2009 @ 10:18:
[...]
Meestal zie je ze tegelijkertijd.
Dan zou ik eens gaan kijken naar Data bound objects.
Als je in design op je combobox klikt krijg je rechtsboven een [>] symbooltje.
Hier kan je je data bindings instellen. probeer dat eens

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Armageddon_2k schreef op dinsdag 10 november 2009 @ 10:19:
[...]


Dan zou ik eens gaan kijken naar Data bound objects.
Als je in design op je combobox klikt krijg je rechtsboven een [>] symbooltje.
Hier kan je je data bindings instellen. probeer dat eens
Ik heb dit nu ook geprobeerd, maar dat lost het niet op. Het vullen van de datasource gaat snel, maar zodra ik dit koppel aan de verschillende comboboxen dan duurt het weer langer. Het lijkt dus toch alsof het vullen van de comboboxen zeer traag is. Het mooiste zou zijn als ik ze dus kan 'kopieren' op de 1 of andere manier.
Naar het overerven ben ik nog aan het kijken.

Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 03:43
En als je zoiets doet:
C#:
1
2
3
comboBox.BeginUpdate();
// Add many items
comboBox.EndUpdate();

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
sig69 schreef op dinsdag 10 november 2009 @ 11:18:
En als je zoiets doet:
C#:
1
2
3
comboBox.BeginUpdate();
// Add many items
comboBox.EndUpdate();
Heb ik er bijgezet, maar maakt geen verschil

Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Om hoeveel Items gaat het eigenlijk?
En ik begin me af te vragen of het dan wel handig is om een combo box te gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Armageddon_2k schreef op dinsdag 10 november 2009 @ 11:53:
Om hoeveel Items gaat het eigenlijk?
En ik begin me af te vragen of het dan wel handig is om een combo box te gebruiken.
soms om wel 1000 items

Het handige van de combobox is het autoaanvullen en het openklappen van de combobox.

Acties:
  • 0 Henk 'm!

  • Armageddon_2k
  • Registratie: September 2002
  • Laatst online: 17-09 15:01

Armageddon_2k

Trotse eigenaar: Yamaha R6

Verwijderd schreef op dinsdag 10 november 2009 @ 11:57:
[...]

soms om wel 1000 items

Het handige van de combobox is het autoaanvullen en het openklappen van de combobox.
Ik heb net even een testje gedaan met het invoegen van data dmv een databound combo box.
Ik haal met 1000 items een invoertijd van 300 miliseconden.
Denk dat je ergens wat verkeerd doet :P

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        Dim stopw As New Stopwatch
        Dim index As Integer

        stopw.Start()

        For index = 1 To 10000
            DataSet1.Tables(0).Rows.Add(index)
        Next

        ComboBox1.DataSource = DataSet1.Tables(0)
        ComboBox1.DisplayMember = "Column1"

        stopw.Stop()

        MsgBox(stopw.ElapsedMilliseconds)


Ik heb een simpele Dataset toegevoegd, 1 tabel, 1 colom.
Deze kopel je NIET aan je Combobox in runtime, je vult hem eerst en koppelt hem dan aan je combobox.

Het voorbeeld dat ik je gaf bevat 10.000 items en laad binnen 1 seconde.
Pagina: 1