Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Adresiranje kontrola pomocu varijable, kako? - VB2008

[es] :: .NET :: Adresiranje kontrola pomocu varijable, kako? - VB2008

[ Pregleda: 1953 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

7e7
Somewhere in between

Član broj: 54333
Poruke: 100
*.static.sbb.rs.



Profil

icon Adresiranje kontrola pomocu varijable, kako? - VB200807.02.2013. u 20:18 - pre 135 meseci
Pozdrav svima,

prvo da napomenem da sam pocetnik u programiranju i da sam samouk. Pokusavao sam naci rjesenje za ovaj problem na stranim forumima ali nisam uspio.

O cemu se radi:

na glavnoj formi programa imam 100 kontrola tipa RadioButton, koje su nazvane redom od rbn1 do rbn100.
Korisnik unosi vrijednost varijable intBrojFot koja u praksi moze biti od 1 do 100.
Sva ta radio dugmad na glavnoj formi inicijalno imaju Visible svojstvo podeseno na False.

Ja zelim da pomocu koda na osnovu vrijednosti intBrojFot varijable odredjenom broju radio dugmadi podesim Visible svojstvo na True.

Da dodatno pojasnim: sve RadioButton kontrole imaju Visible svojstvo podeseno na False, korisnik unosi broj (intBrojFot varijabla) koji govori kojim RadioButton kontrolama ce Visibility biti postavljena na True.
Ako je intBrojFot = 35, prvih 35 radio dugmadi ce biti vidljivo; ako je intBrojFot 66, prvih 66 radio dugmadi ce biti vidljivo, itd.


Pokusavam sa sledecim kodom:

Code:

Dim i As Integer = intBrojFot

        For Each c As Control In MainForm.Controls
            If c.Name = "rbn" & i Then
                c.Visible = True
            End If

            i = i - 1
            If i = 0 Then Exit For

        Next



Kada stavim Break Point ispod ovog koda i pokrenem program desava se sledece:

kod ne promjeni Visible svojstvo kod ni jedne RadioButton kontrole, a varijabla i uvijek ima vrijednost za 6 manju od vrijednosti intBrojFot!
Npr. ako je intBrojFot = 25, kad se program zaustavi na Break Point-u (koji je ispod For - Next petlje), i ce imati vrijednost 19. Ako je intBrojFot = 50, i ce biti 44.
Meni to govori da se For - Next petlja 6 puta izvrsila i onda stala. Zasto, ne znam.

Molim vas da mi pojasnite gdje grijesim i kako da ovo postignem.

Hvala unaprijed!
 
Odgovor na temu

JUDO_BLACK_BOY
Pavlovic Bojan
Krusevac

Član broj: 132122
Poruke: 39

Sajt: elviksoft.zapto.org


Profil

icon Re: Adresiranje kontrola pomocu varijable, kako? - VB200807.02.2013. u 21:35 - pre 135 meseci
pokusaj da svim radiobtn das isto ime i da ih indexiras
pa da ti index(integer) to odradi

I am not afraid of death, i just don't want to be there when its happens!
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.dynamic.isp.telekom.rs.



+104 Profil

icon Re: Adresiranje kontrola pomocu varijable, kako? - VB200807.02.2013. u 23:14 - pre 135 meseci
Citat:
Meni to govori da se For - Next petlja 6 puta izvrsila i onda stala. Zasto, ne znam.

Jednom prolaziš kroz sve kontrole i kad naiđe na neku čije ime zadovoljava uslov staviš da je vidljiva i smanjiš "i" za 1. Pošto ti se "i" smanji za 6, znači da si pri jednim prolazu kroz sve kontrole naišao na 6 koje su u datom trenutku imali odgovarajući uslov.

Zamisli ovakav slučaj. Početno "i" je 7, a radio kontrole u MainForm.Controls su dodate ovim redom

rbn5
rbn4
rbn3
rbn7
rbn8
rbn6
rbn1
rbn2

Prilikom prolaza, sa tvojim kodom, dogodiće se sledeća situacija za svaku kontrolu pri iteraciji

rbn5 - i=7 nije ispunjen uslov
rbn4 - i=7 nije ispunjen uslov
rbn3 - i=7 nije ispunjen uslov
rbn7 - i=7 uslov je ispunjen. Postavlja se visible i "i" postaje 6
rbn8 - i=6 nije ispunjen uslov
rbn6 - i=6 uslov je ispunjen. Postavlja se visible i "i" postaje 5
rbn1 - i=5 nije ispunjen uslov
rbn2 - i=5 nije ispunjen uslov

Kao što vidiš samo će dve kontrole biti vidljive, a ne 7 kako si zamislio. Rešenje problema je ili da radio kontrole dodaješ odgovarajučim redosledom (od najvećeg "i" broja) ili da napraviš petlju u petlji pa da za svaku moguću vrednost "i" broja prođeš kroz sve kontrole dok ne nađeš odgovarajuću-

Pozdrav
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

7e7
Somewhere in between

Član broj: 54333
Poruke: 100
212.200.75.*



Profil

icon Re: Adresiranje kontrola pomocu varijable, kako? - VB200808.02.2013. u 10:39 - pre 135 meseci
Citat:
JUDO_BLACK_BOY:
pokusaj da svim radiobtn das isto ime i da ih indexiras
pa da ti index(integer) to odradi


Zar mogu dvije kontrole na formi imati isto ime?

Jel' pod index mislis na TabIndex svojstvo?

Tako bi bilo lako, ako kontrole mogu imati isto ime. Hvala!



@ vujkev

Hvala na odgovoru! Razumijem tvoje objasnjenje sta se dogadja, nisam se toga sjetio.

Nije mi jasno kako da dodajem kontrole odgovarajucim redoslijedom. Po mojoj logici to bi trebalo raditi jer sam stavio da je

i = intBrojFot, a ta vrijednost prestavlja "najvece" radio dugme kojem treba promjeniti vrijednost. Ja to ovako zamisljam, ispravi me molim te:

npr.

intBrojFot = 9

i = intBrojFot

rbn9 , i = 9, mijenja se Visible vrijednost ' (po mom shvatanju rbn9 ce biti kontrola od koje ce petlja poceti da radi, zbog onoga If c.Name = "rbn" & i), a i je sada 8
rbn8, i = 8, mijenja se Visible, i je sada 7
rbn 7, isto se desava, itd. sve do
rbn1, i = 1, mijenja se Visible, i = 0
If i = 0 Then Exit For

Znaci ne razumijem zasto on ne ide tim redoslijedom. A druga stvar je, zasto ne mijenja vrijednost Visible svojstva ni jednoj kontroli?

Pokusavao sam sa ovakvim jednostavnijim kodom da testiram taj kod koji bi trebao da mijenja Visible svojstvo:

Code:

Dim i As Integer = 46

        For Each c As Control In MainForm.Controls
            If c.Name = "rbn" & i Then
                c.Visible = True
            End If

        Next 


Znaci bez i, samo da kontroli rbn46 postavi Visible na True, ali on to ne uradi (kad stane na Break Point-u ja provjerim u MainForm Design prozoru i vidim da je Visible kontrole rbn46 i dalje False).
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: Adresiranje kontrola pomocu varijable, kako? - VB200808.02.2013. u 11:44 - pre 135 meseci
Malo mi je cudan GUI sa 100 istih kontrola, al ajde...

Mogao bi da probas ovako nekako
Code:
'ocistimo stare kontrole
pnlRadioButtons.Clear

' napravimo nove
For i As Integer = 1 To inBrojFot
  Dim btn As RadioButton = new RadioButton
  btn.Y = i * 20
  btn.Parent = pnlRadioButtons
Next

Sad, ostaje pitanje sta ti posle radis sa tim buttonima. Verovatno ces im nakaciti neki event hendler, ili ces ih staviti u Dictionary pa to posle ispitivati...
 
Odgovor na temu

7e7
Somewhere in between

Član broj: 54333
Poruke: 100
212.200.75.*



Profil

icon Re: Adresiranje kontrola pomocu varijable, kako? - VB200808.02.2013. u 12:44 - pre 135 meseci
Citat:
ravni: Malo mi je cudan GUI sa 100 istih kontrola, al ajde...

Mogao bi da probas ovako nekako
Code:
'ocistimo stare kontrole
pnlRadioButtons.Clear

' napravimo nove
For i As Integer = 1 To inBrojFot
  Dim btn As RadioButton = new RadioButton
  btn.Y = i * 20
  btn.Parent = pnlRadioButtons
Next

Sad, ostaje pitanje sta ti posle radis sa tim buttonima. Verovatno ces im nakaciti neki event hendler, ili ces ih staviti u Dictionary pa to posle ispitivati...


OK, hvala, samo nije mi jasno nekoliko stvari ovdje. Sta je pnlRadioButtons (nesto sto nemam deklarisano a trebao bih deklarisati) i cemu sluzi ova linija btn.Y = i * 20 ?
Takodje mi prijavljuje da Y nije clan od System.Windows.Forms.RadioButton.

Znam da je GUI malo cudan, pokusacu da pojasnim. Ideja mi je da od svih 100 RadioButton kontrola budu vidljive samo one koje se koriste taj put, obicno je to oko 50.
Program bi sluzio za brojanje glasova nakon takmicenja, radio button-s predstavljaju svakog ucesnika takmicenja, a inace, svaki ucesnik moze dobiti od 1 do 10 bodova (i to mnogo puta po 1-10 bodova).
Moja ideja je da prilikom upisa glasa za nekog takmicara, onaj ko broji glasove selektuje njegov radio button, to za rezultat ima prikazivanje trenutnog skora tog takmicara u jednoj TextBox kontroli, a onda klikne na jedno od dugmadi oznacenih sa 1-10, sto za rezultat ima povecanje skora tog takmicara. Na kraju bi se ti rezultati sortirali i prikazali u jednoj drugoj formi. Nadam se sam malo uspio objasniti.

Originalna ideja mi je bila da na osnovu broja takmicara pomocu koda (tokom runtime-a) napravim potrebni broj radio button kontrola, ali mi se ovo ucinilo jednostavnije. Pozdrav i hvala jos jednom!
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Adresiranje kontrola pomocu varijable, kako? - VB200808.02.2013. u 12:48 - pre 135 meseci
Umesto 50 radio buttona treba ti jedan drop down list sa 50 elemenata. Tako se inače radi, kod je jednostavniji, a i manje mesta zauzima na prozoru.
 
Odgovor na temu

ravni

Član broj: 8894
Poruke: 373



+15 Profil

icon Re: Adresiranje kontrola pomocu varijable, kako? - VB200808.02.2013. u 15:19 - pre 135 meseci
Ili grid sa editabilnom kolonom za unos ocene.

pnlRadioButtons je panel koji stavis na formu i na kome ce se prikazati dugmici.
Linija
Code:
btn.Y = i * 20
sluzi tome da poredja radio buttone jedan ispod drugog. Umesto Y stavi Top, trebalo bi da prihvati.
 
Odgovor na temu

PeleZr
Petrovic Igor
Zrenjanin

Član broj: 237267
Poruke: 47
*.dynamic.sbb.rs.



Profil

icon Re: Adresiranje kontrola pomocu varijable, kako? - VB200808.02.2013. u 19:14 - pre 135 meseci
Code:


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim i As Integer
    Dim s As String
        s = "RadioButton"
        i = Convert.ToInt32(TextBox1.Text)
        For index As Integer = 1 To i
            s = s & index
            For Each c In Me.Controls
                If c.Name = s Then
                    c.Visible = False
                End If
            Next
            s = "RadioButton"
        Next
    End Sub



Evo koda koji ti radi posao, samo ga modifikuj prema svojim potrebama
 
Odgovor na temu

7e7
Somewhere in between

Član broj: 54333
Poruke: 100
*.static.sbb.rs.



Profil

icon Re: Adresiranje kontrola pomocu varijable, kako? - VB200809.02.2013. u 11:12 - pre 135 meseci
Hvala na prijedlozima, znam da bi bilo lakse sa drop-down listom ali ja bih ipak da ovako uradim jer mislim da ce biti puno lakse za koristenje (to brojanje se zna lako iskomplikovati a mislim da je ovako malo preglednije i brze).

Hvala ravni i Pele, isprobavajuci ovo sve izbrisao sam radio button-e i greskom snimio projekat tako da cu sad prvo probati da napravim da u runtime-u pravim kontrole, pa cemo vidjeti.
 
Odgovor na temu

[es] :: .NET :: Adresiranje kontrola pomocu varijable, kako? - VB2008

[ Pregleda: 1953 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.