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

Problem sa formom u C#

[es] :: .NET :: Problem sa formom u C#

Strane: 1 2

[ Pregleda: 5065 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Problem sa formom u C#05.12.2012. u 10:06 - pre 138 meseci
E, da, glavna stvar, i verovatno rešenje za tvoje pitanje. Kada u Semafor.OnPaint treba da se iscrtaju svetla i stringovi ti imaš switch koji ispituje ključeve (stringove), i za svaki od tri hardkodovana stringa ti tu radiš odlučuvanje u kojoj boji svetla treba da budu. Za string koji nije jupi/piju biće prikazano plavo svetlo. Ti ne želiš to. Ti želiš da se boja svetla utvrdi na osnovu kvp.Value, i to treba da bude uslov switcha.
 
Odgovor na temu

TATATA
Nezaposlen
Čačak

Član broj: 309279
Poruke: 16



Profil

icon Re: Problem sa formom u C#05.12.2012. u 10:14 - pre 138 meseci
Proveriću, pa ću javiti šta sam uradila.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Problem sa formom u C#05.12.2012. u 10:14 - pre 138 meseci
E, da, još jedna primedba. Ovu klasu Semafor po svemu sudeći ti praviš, a nije ti data. U klasi trenutno ne postoji način da se kontroliše redosled svetala. Foreach petlja nad rečnikom će ti dati sadržaj u nekom svom internom redosledu. Nekad će biti (jupi,ipuj,piju), nekad može biti nešto drugo. Možda će biti uvek isto, bilo kojim redosledom da popunjavaš rečnik. Prosto nemaš nekakve garancije u vezi sa redosledom. Ako želiš da kontrolišeš redosled prikaza svetala onda moraš prvo da skontaš kako to omogućiti u interfejsu, to jest šta korisnik klase treba da uradi da bi kontrolisao redosled svetala. Kad to skontaš onda ćeš morati i da prilagodiš kod u klasi.
 
Odgovor na temu

Mare_TS
Marko Pravdic
Software Engeneer - Microsoft .NET
Beograd, Banovo Brdo

Član broj: 62586
Poruke: 35



+1 Profil

icon Re: Problem sa formom u C#05.12.2012. u 11:10 - pre 138 meseci
Izmeni Update, da kod dodavanja u kolekciju ispituje da li vec postoji key-value par i da radi add odnosno update tog para:
Code:
public void Update(PushEventArgs args)
        {
            foreach (KeyValuePair<string, LightValue> kvp in Lights)
            {
                if (args.Name == kvp.Key)
                {
                    switch (args.Light)
                    {
                        case "Red":
                            if (Lights[args.Name] == null)
                                Lights.Add(args.Name, Semafor.LightValue.Red);
                            else
                                Lights[args.Name] = Semafor.LightValue.Red;
                            break;
                        case "Green":
                            if (Lights[args.Name] == null)
                                Lights.Add(args.Name, Semafor.LightValue.Green);
                            else
                                Lights[args.Name] = Semafor.LightValue.Green;
                            break;
                        case "Orange":
                            if (Lights[args.Name] == null)
                                Lights.Add(args.Name, Semafor.LightValue.Orange);
                            else
                                Lights[args.Name] = Semafor.LightValue.Orange;                            
                            break;
                    }
                    break;
                }
            }
...


i ovo u OnPaint:
Code:
protected override void OnPaint(PaintEventArgs e)
        {

            ...

            foreach (KeyValuePair<string, LightValue> kvp in Lights)
            {                
                switch (kvp.Key)
                {
                    case "jupi":
                        {
                            SolidBrush orangeBrush = new SolidBrush(boja("jupi"));
                            ...
                        }
                    case "ipuj":
                        {
                            SolidBrush orangeBrush = new SolidBrush(boja("ipuj"));
                            ...
                        }
                    case "piju":
                        {
                            SolidBrush orangeBrush = new SolidBrush(boja("piju"));
                            ...
                        }

i dodaj u Semafor.cs na dnu:
Code:
private Color boja(string imeKvadratica)
        {
            Color b = Color.Black;
            switch (Lights[imeKvadratica])
            {
                case LightValue.Red:
                    b = Color.Red;
                    break;
                case LightValue.Green:
                    b = Color.Green;
                    break;
                case LightValue.Orange:
                    b = Color.Orange;
                    break;
            }
            return b;
        }


Trebalo bi da radi ;)
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Problem sa formom u C#05.12.2012. u 11:36 - pre 138 meseci
Ne bih rekao da je to rešenje. Jupi i piju nisu boje nego samo neki stringovi, koje samo treba prikazati, i korisnik može da bira te stringove. Jupi stringovi ne smeju da postoje u kodu klase Semafor. Takođe, ovaj kod u funkciji Update može da bude elegantiji i kraći, i bez potrebe za petljom i svičem.

Code:
public void Update(PushEventArgs args)
{
  if (!Lights.ContainsKey(args.Name))
    return;

  if (!Enum.IsDefined(typeof(LightValue), args.Light)
    return;

  Lights[args.Name] = (LightValue)Enum.Parse(typeof(LightValue), args.Light);
}
 
Odgovor na temu

TATATA
Nezaposlen
Čačak

Član broj: 309279
Poruke: 16



Profil

icon Re: Problem sa formom u C#05.12.2012. u 11:52 - pre 138 meseci
Mihajlo, Mare je rešio problem. Funkcioniše baš onako kako treba.
U pravu si, jupi i piju nisu boje, već labele pored kockica. Ali pomoću njih korisnik bira kojoj kockici će da promeni boju.

Hvala na savetima.
Pozdrav
 
Odgovor na temu

Mare_TS
Marko Pravdic
Software Engeneer - Microsoft .NET
Beograd, Banovo Brdo

Član broj: 62586
Poruke: 35



+1 Profil

icon Re: Problem sa formom u C#05.12.2012. u 11:53 - pre 138 meseci
Ako ti tako kažeš, da ne kačim ceo projekat. :)

Evo samo da te podsetim šta piše u prvom postu
Citat:
Pravim formu u C# koja sadrži 3 kockice u razlicitim bojama (crvena, žuta, zelena), ime svake kockice, dva TextBox-a i button OK.

Na pocetku je zadato ime kockice i njena boja. Npr:
"prva" Green
"druga" Red
"treca" Yellow

ja ovde nigde ne vidim da piše da jupi i piju bira korisnik, ili možda grešim. Koliko sam ja skontao nije poenta da se napravi multifunkcionalna aplikacija već da ona pokaže da svoje poznavanje tehnologije (delegata, eventargova ...).

Ja sam postavio izmene NJENOG KODA koje treba da primeni, ja bi radio na neki drugi način sve ovo.
Skoro uvek može elegantnije, ali ovde nije to poenta. :)
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Problem sa formom u C#05.12.2012. u 12:12 - pre 138 meseci
Tatata, trenutno ti radi, ali ako bi promenila jupi/piju stringove u konstruktoru od Form1 onda bi prestalo da radi. Treba samo da ukloniš switch(kvp.Key), jer je kod u svakoj case grani postao isti, a poziv funkcije boja trabe da bude boja(kvp.Key).
 
Odgovor na temu

[es] :: .NET :: Problem sa formom u C#

Strane: 1 2

[ Pregleda: 5065 | Odgovora: 27 ] > FB > Twit

Postavi temu Odgovori

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