C# - Problemi i rješenja izdvojena tema

poruka: 2.151
|
čitano: 708.531
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
odjavljen
offline
Re: C# - Problemi i rješenja
slobo14 kaže...
betmen kaže...

Još jedno pitanje, recimo da imam metode btn1_click, btn2_click, btn3_click, itd. Znači više botuna, a svaki radi neku svoju funkciju.

 

Mogu li ikako u programu pozvati metodu btn{x}_click, odnosno ako imam broj x=3 da se pozove btn3_click. Znači nešto na taj princip, da ovisno o tome koliki mi je x dobijem odgovarajuću metodu.

 

Ja sam pokušavao sve metode strpati u jedan niz tipa void i onda ih pozivati po indeksu, al to nije bilo prepametno {#}

 

typeof(Tip).GetMethod("metoda").Invoke(null, null);

 

Tip - to je klasa iz koje pozivas metodu
metoda - naziv metode u klasi

Ovo sam koristio za staticne metode, sad nezz da li moze i za normalne...

 

mislim da ide nekako ovako (ne da mi se paliti studio)...

 

objekt je instanca neke klase

 

objekt.GetType().GetMethod("metoda").Invoke(null, null);

 

 

Freak Show Inc.
14 godina
neaktivan
offline
C# - Problemi i rješenja

Pozdrav ekipa,

 

problem je sljedeći: napraviti konzolnu aplikaciju za škare, papir, kamen igricu ali da nakon što korisnik ili računalo pobijede više od 2 puta da završi sa izvođenjem programa

 

moj problem je da nakon što racunalno ili korisnik pobijedi 3 puta, program i dalje ostaje u petlji

kod je sljedeći i unaprijed se zahvaljujem na pomoći

 

Random broj = new Random();
            int racScore = 0, kompScore = 0;

            do
            {

                int komp = broj.Next(0, 2);

                Console.Write("Unesite 0 za kamen, 1 za škare i 2 za papir : ");
                int unos = int.Parse(Console.ReadLine());

                if (unos < 0 ^ unos > 2) Console.WriteLine("Pogrešan unos");

                else if (komp == unos)
                {
                    Console.WriteLine("Poništavanje, jednak unos");
                    racScore = 0; kompScore = 0;
                }
                else if ((komp == 0 && unos == 1) || (komp == 1 && unos == 2) || (komp == 2 && unos == 0))
                {
                    Console.WriteLine("Računalo je pobijedilo");
                    racScore++;
                    kompScore = 0;
                }
                else
                {
                    Console.WriteLine("Korisnik je pobijedio");
                    kompScore++;
                    racScore = 0;
                }
            
            } while (racScore<3 || kompScore<3);
            if (racScore==3) Console.WriteLine("Racunalo je pobijedilo konacno");
            else Console.WriteLine("Korisnik je pobijedio konacno");

-----

sad sam shvatio da sam krivo postavio uvjet za završetak trebao sam
            } while (racScore<3 && kompScore<3);

 

sad valja

Poruka je uređivana zadnji put uto 15.1.2013 0:10 (mean_machine).
 
0 0 hvala 0
12 godina
neaktivan
offline
C# - Problemi i rješenja

Jedno pitanje vezano za EF:

 

poceo sam sa ucenjem EF i sad kako sam ja razumio, ako sam dobro razumio, kada hocemo da pozovemo kolekciju koristimo npr:

 

public IList<nesto> Nesto()

{

     return ctx.nesto.ToList();

}

 

a kako da provjerim postoji li neki string u bazi.

 
0 0 hvala 0
17 godina
offline
C# - Problemi i rješenja

var Nesto = Db.TabelaUbazi.Where(m=>m.Polje == "nekistring").Count();

if Nesto > 0 Postoji = true;

 

Rvat katolik!
 
0 0 hvala 1
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Ili staviš umjesto Count(), SingleOrDefault(), te umjesto Nesto > 0, pišeš if(Nesto != null).

Za liste - da, ToList metod će vratiti listu.

12 godina
neaktivan
offline
C# - Problemi i rješenja

Eh ovako kod mi radi, ali koje su vaše zamjerke i postoji li drugi način, ili sam ja ovo samo sklepao da radi:

U klasi sa rad sa bazom sam napravio slijedeće:

 

public int UzmiUser(string user)
        {
           int iU =  auta.TblCredentials.Where(x => x.username == user).Count();
           return iU;
        }
        public int UzmiPass(string pass)
        {
            int iP = auta.TblCredentials.Where(x => x.password == pass).Count();
            return iP;
        }

 

a pozvao sam na slijeći način:

 

using (var auto = new RadSaBazom())
            {
                if (auto.UzmiUser(txtUser.Text) > 0 && auto.UzmiPass(txtPass.Text) > 0)
                {
                    // kod neki
                }
                else
                {
                    // kod neki
                }
            }

 
0 0 hvala 0
17 godina
odjavljen
offline
Re: C# - Problemi i rješenja
royalhero kaže...

Ili staviš umjesto Count(), SingleOrDefault(), te umjesto Nesto > 0, pišeš if(Nesto != null).

Za liste - da, ToList metod će vratiti listu.

 

Count() bi trebao biti znatno "lakši" za server ali uvjerio sam se na svoje oči da LINQ radi izuzetno neoptimzirane izraze pa ono. Ali svakako bi po nekoj logici trebao uzimati Count() ako ga samo zanima da li nešto postoji.

Freak Show Inc.
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Friday kaže...

 

Count() bi trebao biti znatno "lakši" za server ali uvjerio sam se na svoje oči da LINQ radi izuzetno neoptimzirane izraze pa ono. Ali svakako bi po nekoj logici trebao uzimati Count() ako ga samo zanima da li nešto postoji.

Ma još nisam došao u neke probleme (jer nemam velikih projekata), ali da u pravu si jer i u samom SQL ima Count agregatna funkcija.

12 godina
neaktivan
offline
C# - Problemi i rješenja

Sad malo pokušao i vidjo grešku, može se logirati bilo tko znači kombinacijom username-a i password-a, jer ovdje nije striktno rečeno za kojeg usera koji password, nego prihvata bilokojeg usera i bilokoji password, moja greška. {#}

 

Ali uspješno Riješeno, hvala Vam na pomoći {#}

Poruka je uređivana zadnji put uto 15.1.2013 16:24 (Srednjoskolac2med).
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

public User LogIn(string username, string password)

{

   return ctx.Users.Where(X=>x.username == username && x.password == password).SingleOrDefault();
}

Onda provjeriš ako vraćaš null, onda nevalja, ako nije onda je u redu.

Ili ako ćeš sa Count:
public int LogIn(string username, string password)

{

   return ctx.Users.Where(X=>x.username == username && x.password == password).Count();
}

 

Pa provjeri da li je 0.

12 godina
neaktivan
offline
Re: C# - Problemi i rješenja
royalhero kaže...

public User LogIn(string username, string password)

{

   return ctx.Users.Where(X=>x.username == username && x.password == password).SingleOrDefault();
}

Onda provjeriš ako vraćaš null, onda nevalja, ako nije onda je u redu.

Ili ako ćeš sa Count:
public int LogIn(string username, string password)

{

   return ctx.Users.Where(X=>x.username == username && x.password == password).Count();
}

 

Pa provjeri da li je 0.

Upravo tako {#}

12 godina
neaktivan
offline
C# - Problemi i rješenja

Pozdrav, imam mali problem, kad pretražujem DatGridView, nađe mi ono što treba naravno i oboji u željenu boju i sve ali, neće da mi fokusira na taj red, evo koda pa...

 

foreach (DataGridViewRow red in DGV.Rows)
                {
                    red.DefaultCellStyle.BackColor = Color.White;
                    string TraReg = red.Cells[0].Value.ToString();
                    if (TraReg == nesto)
                    {
                        red.DefaultCellStyle.BackColor = Color.Red;
                        red.Selected = true;
                        DGV.FirstDisplayedCell = DGV.CurrentCell;
                    }
                }

Poruka je uređivana zadnji put pet 25.1.2013 13:05 (Srednjoskolac2med).
 
0 0 hvala 0
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja

DVG.CurrentCell = red[0]

 

Tako bi trebalo raditi... Stavi to ispod promjene boje (Color.Red). I znaš da će ti fokusirati na zadnji redak koji zadovoljava uvjet?

http://nighthawk-software.blogspot.com/
12 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Sum_of_all_fears kaže...

DVG.CurrentCell = red[0]

 

Tako bi trebalo raditi... Stavi to ispod promjene boje (Color.Red). I znaš da će ti fokusirati na zadnji redak koji zadovoljava uvjet?

Cannot apply indexing with [] to an expression of type 'System.Windows.Forms.DataGridViewRow'

 

Ovu grešku mi izbacuje trenutno, sa tvojim kodom.

 

DGV.CurrentCell = red.Cells[0];

 

Ovako hoće, ali opet samo prebaci kao da je trenutno aktivan, ali mi ne skrola dgv pa da odradi focus na njemu.

 

Ali ovako Funkcioniše:

 

DGV.FirstDisplayedCell = red.Cells[0];

Poruka je uređivana zadnji put pet 25.1.2013 13:26 (Srednjoskolac2med).
17 godina
offline
C# - Problemi i rješenja

Jedno pitanje vezano za Interface.

 

Cemu definirati interface kada svakako u klasi koja ce inheritati taj interface moram definirati metodu koja je deklarirana u interfaceu? Sta nije lakse izbaciti interface i to je to? 

Vidim da dosta ljudi forsira interface gdje se ne koristi multiple inheritance, pa me malo buni njegova upotreba...

Rvat katolik!
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Recimo da imaš neki interface sa popisom metoda. I imaš više klasa koje nasljeđuju taj interface.

Poslije kada ti treba neka metoda, jednostavno stvoriš objekt koji je tipa tog interface-a i dodijeliš mu referencu na bilo koju klasu koja nasljeđuje interface.

U tom slučaju ne moraš znati ništa drugo o tom razredu već uzimaš samo tu metodu koja ti treba.

16 godina
odjavljen
offline
Re: C# - Problemi i rješenja
Srednjoskolac2med kaže...
...

 

Ovako hoće, ali opet samo prebaci kao da je trenutno aktivan, ali mi ne skrola dgv pa da odradi focus na njemu.

Pogledaj ovaj link. Nisam na svom kompu, ne mogu provjeriti šta od ovog funkcionira.

http://nighthawk-software.blogspot.com/
17 godina
offline
Re: C# - Problemi i rješenja
Hrvojeee kaže...

Recimo da imaš neki interface sa popisom metoda. I imaš više klasa koje nasljeđuju taj interface.

Poslije kada ti treba neka metoda, jednostavno stvoriš objekt koji je tipa tog interface-a i dodijeliš mu referencu na bilo koju klasu koja nasljeđuje interface.

U tom slučaju ne moraš znati ništa drugo o tom razredu već uzimaš samo tu metodu koja ti treba.

Zasto ne instancirati tu klasu koja ima implementiranu metodu?

Rvat katolik!
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja
tnakir kaže...
Hrvojeee kaže...

Recimo da imaš neki interface sa popisom metoda. I imaš više klasa koje nasljeđuju taj interface.

Poslije kada ti treba neka metoda, jednostavno stvoriš objekt koji je tipa tog interface-a i dodijeliš mu referencu na bilo koju klasu koja nasljeđuje interface.

U tom slučaju ne moraš znati ništa drugo o tom razredu već uzimaš samo tu metodu koja ti treba.

Zasto ne instancirati tu klasu koja ima implementiranu metodu?

Možeš i tako, ali onda koristiš samo tu klasu.

A možda bi htio koristiti i neku drugu implementaciju metode koja nije u toj klasi nego je u nekoj drugoj klasi, a koja opet nasljeđuje interface.

 

12 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Sum_of_all_fears kaže...
Srednjoskolac2med kaže...
...

 

Ovako hoće, ali opet samo prebaci kao da je trenutno aktivan, ali mi ne skrola dgv pa da odradi focus na njemu.

Pogledaj ovaj link. Nisam na svom kompu, ne mogu provjeriti šta od ovog funkcionira.

Riješio, u svakom slučaju HVALA PUNO {#}

17 godina
offline
Re: C# - Problemi i rješenja
Hrvojeee kaže...
tnakir kaže...
Hrvojeee kaže...

Recimo da imaš neki interface sa popisom metoda. I imaš više klasa koje nasljeđuju taj interface.

Poslije kada ti treba neka metoda, jednostavno stvoriš objekt koji je tipa tog interface-a i dodijeliš mu referencu na bilo koju klasu koja nasljeđuje interface.

U tom slučaju ne moraš znati ništa drugo o tom razredu već uzimaš samo tu metodu koja ti treba.

Zasto ne instancirati tu klasu koja ima implementiranu metodu?

Možeš i tako, ali onda koristiš samo tu klasu.

A možda bi htio koristiti i neku drugu implementaciju metode koja nije u toj klasi nego je u nekoj drugoj klasi, a koja opet nasljeđuje interface.

 

Aha, dakle u tome je stvar. Hvala na pomoci.

Rvat katolik!
17 godina
odjavljen
offline
C# - Problemi i rješenja

Masa ljudi biva zbunjena interfejsima. I ja sam isto zapravo na njih ispočetka gledao kao na nešto nepotrebno. Ali zapravo su itekako potrebni i zgodni. Kod nas u jednom većem projektu imamo dosta malen broj formi ali enormno velik broj user kontrola koji se po potrebi hostaju u jednoj formi koja ima sređeno zaglavlje i ostale vizualne sitnice. Sve kontrole implementiraju određeni interfejs koji između ostalog ima i i Save metodu. Na taj način klikom na Save gumb na formi dovoljno je pozvati

((INekiInterfejs)this.Controls[0]).Save();

 

Tako ne moraš provjeravati o kojoj konkretnoj kontroli se radi - samo joj kažeš "Snimi podatke". Konkretna implementacija je u svakoj kontroli različita ali se pozivaju jednako i u tome je ljepota.

Freak Show Inc.
 
1 0 hvala 2
17 godina
offline
Re: C# - Problemi i rješenja
Friday kaže...

Masa ljudi biva zbunjena interfejsima. I ja sam isto zapravo na njih ispočetka gledao kao na nešto nepotrebno. Ali zapravo su itekako potrebni i zgodni. Kod nas u jednom većem projektu imamo dosta malen broj formi ali enormno velik broj user kontrola koji se po potrebi hostaju u jednoj formi koja ima sređeno zaglavlje i ostale vizualne sitnice. Sve kontrole implementiraju određeni interfejs koji između ostalog ima i i Save metodu. Na taj način klikom na Save gumb na formi dovoljno je pozvati

((INekiInterfejs)this.Controls[0]).Save();

 

Tako ne moraš provjeravati o kojoj konkretnoj kontroli se radi - samo joj kažeš "Snimi podatke". Konkretna implementacija je u svakoj kontroli različita ali se pozivaju jednako i u tome je ljepota.

Izgleda da ne skuzis dok ti ne zatreba. Hvala na primjerima! Malo sam progledao :)

Rvat katolik!
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Što je pravilnije onda pisati:

IList<T> lista = new List<T>();

ili

 

List<T> lista = new List<T>();

Ionako pišem var (ReSharper me natjerao :D), ali eto kad se već priča o interfejsima da upitam i to.

Poruka je uređivana zadnji put pet 25.1.2013 16:34 (royalhero).
17 godina
offline
Re: C# - Problemi i rješenja
royalhero kaže...

Što je pravilnije onda pisati:

IList<T> lista = new List<T>();

ili

 

List<T> lista = new List<T>();

Ionako pišem var (ReSharper me natjerao :D), ali eto kad se već priča o interfejsima da upitam i to.

I jedno i drugo je ispravno.

 

Poanta je da kod .... evo npr IEnumerable<T> interfacea mozes raditi foreach neovisno o tipu <T>

Rvat katolik!
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Da razumijem to, jer IEnumerable ima smao metod - GetIterator.

Ali evo vidim List nasljeđuje, između ostalog, IList, IEnumerable...

16 godina
neaktivan
offline
C# - Problemi i rješenja

Što je od ove dvije mogućnosti bolje:

 

string ime = textBox1.Text;

string mjesto = textBox2.Text;

int plaća = int.Parse(textBox3.Text);

Radnik novi = new Radnik(ime, mjesto, plaća);

 

ili sveodjedamput ovako:

 

Radnik novi = new Radnik(textBox1.Text, textBox2.Text, int.Parse(textBox3.Text));

?

 

Znam da je prvi primjer čitljiviji, ali postoji li ikakva razlika za računalo u performansama i potrošnji memorije? Ili je to sve ista pašta

Poruka je uređivana zadnji put ned 27.1.2013 7:58 (betmen).
 
0 0 hvala 0
12 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Ja mislim da nema nekih razlika u performansama, ali bih ti ipak preporucio prvu opciju, jer je ipak urednija I citljivija.
No matter how far we are, we're always looking at the same sky
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Pa u prvom primjeru rezervišeš više memorije, dva stringa i jedan integer. No na takvom primjeru je to mizerno.

Ja bih fino imenovao kontrole - txtIme, txtMjesto, txtPlaca i onda pozvao:

Radnik novi = new Radnik(txtIme.Text, txtMjesto.Text, int.Parse(txtPlacaText));

14 godina
neaktivan
offline
C# - Problemi i rješenja

Ja imam jedan čudan problem koji nebi trebao biti
Program je napravljen u Console modu


public void main(string[] args) {

        IniFile iniFile = GetSelectedIniFile();
         if(iniFile == null) { PressAnyKeyExit(); }//NERADI!
         try { iniFile.GetHashCode(); } catch { Console.Write("****"); PressAnyKeyExit(); }//RADI!
}


metoda GetSelectedIniFile ispiše u konzolu datoteke sa indexima i kad korisnik izabere jednu on ju vrati i stavi u variablu iniFile, pošto sam napravio grešku on uvijek vrati null, kad provjerava dali je inifile == null on mi ne pozove PressAnyKeyExit() jer nije otkrio da je null, a kad stavim primjer sa Try/Catch izbaci mi null grešku, jel neko zna u čemu je problem ili to mora tako raditi???

 

stavio sam i break point na provjeru i i debugger je prikazo da je iniFile = null

MG
Moj PC  
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice