C# - Problemi i rješenja izdvojena tema

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

Baze i VB6, ja sam radio ne tako davno, VB6+Access, užas, ali ADO je druga priča.

 

Tip Variant, sam Bog ge je izmislil za neke stvari {#}

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

Ne znam što je sporno oko Close metode, evo sada sam probao meni radi, ma to je on nešto zeznuo.

 

Close se više odnosi na objekt forme, ako u aplikaciji ima jednu formu to bi kako ti kažeš trebalo raditi.

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

I kliknem i nece,sta sam mogo zezenut?

Moj PC  
0 0 hvala 0
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja

Evo prije nekih 10-ak dana za jednoga prijatelja sam sklepao preglednik slika, ništa korisno, 5-10 minuta posla, naravno zahvaljujući .NET-u.

Koristio sam WinForme, button Close sam povezao sa funkcijom čije je tjelo bilo:
this.Close();
http://www.2shared.com/file/85nnKy6i/Preglednik.html

16 godina
online
C# - Problemi i rješenja

Pod Linq vjerojatno misliš na LinqToSQL, jer Linq sam po sebi ima još funkcionalnosti (LinqToObjects, LinqToXml...)

 

EF je moćniji od LinqToSQL, ali je i kompliciraniji za održavanje zbog održavanja modela baze i domain modela.

Za većinu potreba je LinqToSQL, tj SQLMetal dovoljan gdje se oboje automatski generira iz modela baze.

 

Sve ovisi naravno što ti treba.

LinqToSQL je po meni dovoljno dobar za ozbiljne business projekte.

Moj PC  
2 0 hvala 1
15 godina
offline
Re: C# - Problemi i rješenja

I Close() i Application.Exit() bi trebali raditi, no vjerojatno nije registriran event handler.

 

this.button2.Click += new System.EventHandler(this.button2_Click);

 

Ovo se može napraviti ili u Visual Studio dizajneru (double click na button, registracija handlera je kreirana u *.Designer.cs) ili ručno napisati to u konstruktoru forme, poslije InitializeComponent();

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

 

I Close() i Application.Exit() bi trebali raditi, no vjerojatno nije registriran event handler.

 

this.button2.Click += new System.EventHandler(this.button2_Click);

 

Ovo se može napraviti ili u Visual Studio dizajneru (double click na button, registracija handlera je kreirana u *.Designer.cs) ili ručno napisati to u konstruktoru forme, poslije InitializeComponent();

 

Pod određenim okolnostima (nisam posve siguran kada, da budem iskren), win 7 zna izbaciti onu famoznu poruku tipa "This program might not have installed correctly".

Kao lijek preporučam koristiti Environment.Exit(0) jer na taj način jasno daješ do znanja OS-u da je proces ugašen normalno. Neka me netko ispravi ako griješim.

Freak Show Inc.
Poruka je uređivana zadnji put uto 13.3.2012 21:35 (Friday).
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Friday kaže...
 Environment.Exit(0) jer na taj način jasno daješ do znanja OS-u da je proces ugašen normalno. Neka me netko ispravi ako griješim.

Da, neovisno o broju Formi, za razliku od this.Close, koji će samo izaći iz te Forme.

16 godina
odjavljen
offline
Re: C# - Problemi i rješenja
royalhero kaže...
Friday kaže...
 Environment.Exit(0) jer na taj način jasno daješ do znanja OS-u da je proces ugašen normalno. Neka me netko ispravi ako griješim.

Da, neovisno o broju Formi, za razliku od this.Close, koji će samo izaći iz te Forme.

 

Ma napisao sam to zato što je naveden Application.Exit pa se vjerojatno i this.Close() odnosi na main form...

Freak Show Inc.
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja
Bitanga kaže...

Pod Linq vjerojatno misliš na LinqToSQL, jer Linq sam po sebi ima još funkcionalnosti (LinqToObjects, LinqToXml...)

 

EF je moćniji od LinqToSQL, ali je i kompliciraniji za održavanje zbog održavanja modela baze i domain modela.

Za većinu potreba je LinqToSQL, tj SQLMetal dovoljan gdje se oboje automatski generira iz modela baze.

 

Sve ovisi naravno što ti treba.

LinqToSQL je po meni dovoljno dobar za ozbiljne business projekte.

Mi koristimo LinqToSql za poprilično velik projekt. I sve radi bez problema. Nudi nevjerojatnu lakoću korištenja i običnim ljudima bez gotovo ikakvog znanja o sql-u daje CRUD na pladnju. Za neke intenzivne stvari gdje su performanse iznimno bitne koristimo ADO ali to je možda 1% ukupnog "posla" sa bazom. Svakako preporuka za LinqToSql bez obzira na veličinu projekta...

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

Kao što sam maloprije rekao, pretežno radim ASP.NET aplikacije, do sada sam koristio ADO.NET EF za pristup bazama i super mi je, ali nagovorili ste me da pogledam i LinqToSql.

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

Nemoj ni pokušavati ako koristiš inheritance... ako ti je to nebitno bit ćeš vrlo zadovoljan!

Freak Show Inc.
 
0 0 hvala 1
16 godina
odjavljen
offline
Re: C#- Problemi i rješenja
woodgamesfx kaže...
royalhero kaže...

Baze i VB6, ja sam radio ne tako davno, VB6+Access, užas, ali ADO je druga priča.

 

Tip Variant, sam Bog ge je izmislil za neke stvari {#}

 

Istina, ponekad je bio melem na ranu.

Iskreno, danas sam prvi puta imao stvarnu potrebu za dynamic tipom u C# i stvarno mi je uljepšao dan. (sjetio se sada kad sam vidio Variant iako nije baš potpuna analogija).

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

Ucim delegate preko pluralsighta trenutno,ako sam dobro shvatia koncept je da se napravi delegat koji ima određene osobine,npr vraća void a uzima string varijablu onda ja mogu radit varijable u koje cu stavit taj delegat a kroz njega proslijedit jednu ili više metoda koje odgovaraju njegovim osobinama, i onda koristeci tu varijablu mogu pozvat sve te metode na neki objekt u isto vrijeme, jesam promašia nešto?

Nikad te necemo zaboraviti. RIP EnlightenedPhoenix 24.6.2011.
Moj PC  
0 0 hvala 0
16 godina
offline
Re: C# - Problemi i rješenja
athlon64 kaže...

Ucim delegate preko pluralsighta trenutno,ako sam dobro shvatia koncept je da se napravi delegat koji ima određene osobine,npr vraća void a uzima string varijablu onda ja mogu radit varijable u koje cu stavit taj delegat a kroz njega proslijedit jednu ili više metoda koje odgovaraju njegovim osobinama, i onda koristeci tu varijablu mogu pozvat sve te metode na neki objekt u isto vrijeme, jesam promašia nešto?

delegat je referenca na funkciju. i c# ga gleda kao zasebni tip. U .NET 1 i 2 si ga morao definirati kao posebnog clana klase (iako je .net 2 mislim uveo aninimne delegate), ali sa C# 3 i su dosli lambda izrazi, koji prakticki kreiraju istu stvar u compile time-u, u laksi su za koristiti (kod je pregledan).

Npr:

 

Func<string,bool> provjera = s=> return s == "Bug";

bool rez = provjera("Mreza");

 

Func delegatu pozes prosljediti vise parametra, i uvijek vraca nesto, bool u ovom primjeru. Ako ne zelis da vrati nista, znaci void, onda koristis Action<T> (Action<T1,T2,...> ovisno i broju parametra). Ima jos i Predicate<T>, sto je isto kao i Func<T,bool> - znaci predicate vraca uvijek bool. 

 

Inace, kada ovako definiras delegat, odnosno neku "inline" metodu unutar druge metode, to je closure, cesto spominjan termin u (funkcionalnim) programskim jezicima. 

Smith and Wesson - the original point and click interface | http://twitter.com/hhrvoje, http://www.hudosvibe.net
16 godina
offline
C# - Problemi i rješenja

Glede EF vs L2S, imajte na umu da se L2S vise ne razvija, iako ce biti i u narednim verzijama .NET frameworka. Ne bi preporucio koristenje L2S za bilo sta kompleksnije, odnosno uopce ga ne bi preporucio, jer u biti nema nikakve prednosti u odnosu na EF. EF je jednostavan za koristiti, podrzava nekoliko nacina rada - kreiranja potrebnih klasa, od drag-drop baze u EF designer, sto je prakticki isto kao L2S, do code-first pristupa (sve se rucno pise u kodu). Takodjer, EF dataContext (Unit of Work) ima vise mogucnosti od L2S, kao Include, detached entities, POCO, laksi mocking (za unit testing) ...

Svi oni u pozadini koriste ADO.NET, sto je low-level API za rad sa DBMS. 

 

Postoji i opcija koristenja lightweight ORM alata, kao sto su Simple.Data, Massive, ili ono nesto sta dolazi sa WebMatrixom :) Njih ne treba konfigurirati (osim conn stringa na bazu naravno), podrzavaju pisanje upita u SQL-u ili nekom svom query/fluent api nacinu, i naravno mapiranje rezultata upita na objekte. Brzi su, trose malo memorije, i jednostavni su za koristiti, sto su im glavne prednosti. Jako se naslanjaju na dynamic mogucnosti .NET 4. 

Naprimjer, u Simple.Data se moze ovo, bez ikakvog konfiguriranja, kreiranja klasa, bilo cega:

 

dynamic product = Database.Open().Products.FindById(5);

Console.Write(product.Name);

 

ili ako se zeli mapirati rezultate upita na objekt:

 

Product product = Database.Open().Products.FindById(5);

 

Smith and Wesson - the original point and click interface | http://twitter.com/hhrvoje, http://www.hudosvibe.net
Moj PC  
3 0 hvala 1
14 godina
neaktivan
offline
Re: C# - Problemi i rješenja
hudo kaže...
athlon64 kaže...

Ucim delegate preko pluralsighta trenutno,ako sam dobro shvatia koncept je da se napravi delegat koji ima određene osobine,npr vraća void a uzima string varijablu onda ja mogu radit varijable u koje cu stavit taj delegat a kroz njega proslijedit jednu ili više metoda koje odgovaraju njegovim osobinama, i onda koristeci tu varijablu mogu pozvat sve te metode na neki objekt u isto vrijeme, jesam promašia nešto?

delegat je referenca na funkciju. i c# ga gleda kao zasebni tip. U .NET 1 i 2 si ga morao definirati kao posebnog clana klase (iako je .net 2 mislim uveo aninimne delegate), ali sa C# 3 i su dosli lambda izrazi, koji prakticki kreiraju istu stvar u compile time-u, u laksi su za koristiti (kod je pregledan).

Npr:

 

Func<string,bool> provjera = s=> return s == "Bug";

bool rez = provjera("Mreza");

 

Func delegatu pozes prosljediti vise parametra, i uvijek vraca nesto, bool u ovom primjeru. Ako ne zelis da vrati nista, znaci void, onda koristis Action<T> (Action<T1,T2,...> ovisno i broju parametra). Ima jos i Predicate<T>, sto je isto kao i Func<T,bool> - znaci predicate vraca uvijek bool. 

 

Inace, kada ovako definiras delegat, odnosno neku "inline" metodu unutar druge metode, to je closure, cesto spominjan termin u (funkcionalnim) programskim jezicima. 

hvala na objašnjenju ali mi neke stvari još uvjek nisu sjele,dakle ja napravim delegat i dam mu neke osobina, npr vrača void a uzima string, ja onda tom delegatu mogu prosljedit određene metode? drugim riječima učinit da on referencira jednu  ili više metoda i onda kasnije ako želim pozvat sve te metode na neki objekt,samo pozovem delegat koji referencira sve te metode? pokušavam shvatit funkcjonalnost delegata u kratkim crtama,onda ču ja lako pogledat kako ih se koristi.

Nikad te necemo zaboraviti. RIP EnlightenedPhoenix 24.6.2011.
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja
hudo kaže...

 

dynamic product = Database.Open().Products.FindById(5);

Console.Write(product.Name);

 

ili ako se zeli mapirati rezultate upita na objekt:

 

Product product = Database.Open().Products.FindById(5);

 

 

Isto i sa L2S:

 

            var usdc = new UsersDataContext();
            dynamic usr = usdc.Users.FirstOrDefault(p => p.Id == 200);

            MessageBox.Show(usr.Naziv);

Freak Show Inc.
Poruka je uređivana zadnji put sri 14.3.2012 14:45 (Friday).
16 godina
offline
Re: C# - Problemi i rješenja
athlon64 kaže...

hvala na objašnjenju ali mi neke stvari još uvjek nisu sjele,dakle ja napravim delegat i dam mu neke osobina, npr vrača void a uzima string, ja onda tom delegatu mogu prosljedit određene metode? drugim riječima učinit da on referencira jednu  ili više metoda i onda kasnije ako želim pozvat sve te metode na neki objekt,samo pozovem delegat koji referencira sve te metode? pokušavam shvatit funkcjonalnost delegata u kratkim crtama,onda ču ja lako pogledat kako ih se koristi.

 

Da, delegat moze primiti vise referenci. Evo primjer koda, natipkan ovako nabrzaka:

 

class Program

{

 static void Main(string[] args)

 {

 Klasa objekt = new Klasa();

 Klasa.CalcHandler handler = null;

 handler += Zbroj;

 handler += Mnozi;

 

 objekt.Start(handler);

 

 Console.ReadKey();

 }

 

 static void Zbroj(int a, int b)

 {

 Console.WriteLine(a + b);

 }

 

 static void Mnozi(int a, int b)

 {

 Console.WriteLine(a * b);

 }

 

 

 

 private class Klasa

 {

 public delegate void CalcHandler(int a, int b);

 

 public void Start(CalcHandler calcHandler)

 {

   if (calcHandler != null)

    calcHandler(2, 4);

 }

 }

 

}

 

to je multicast delegate, i u biti jedino se koristi (sto sam ja vidio) kod evenata - na jedan event mozes pretplatiti vise metoda, a kod definiranja eventa uvijek kazes kakav je potpis eventa, tako da definiras delegat.

Smith and Wesson - the original point and click interface | http://twitter.com/hhrvoje, http://www.hudosvibe.net
16 godina
offline
Re: C# - Problemi i rješenja
Friday kaže...
hudo kaže...

 

dynamic product = Database.Open().Products.FindById(5);

Console.Write(product.Name);

 

ili ako se zeli mapirati rezultate upita na objekt:

 

Product product = Database.Open().Products.FindById(5);

 

 

Isto i sa L2S:

 

            var usdc = new UsersDataContext();
            dynamic usr = usdc.Users.FirstOrDefault(p => p.Id == 200);

            MessageBox.Show(usr.Naziv);

od kuda je ovaj usdc.Users? Moras ga kreirati putem designera ili nekako. U simple.data niti to nemoras, jerbo je sve dynamic. 

Znaci, file/new project, je sve sta moras napraviti. Dodas DLL od simple.data i conn string u config, i mozes upisati ovu liniju koju sam napisao!

Smith and Wesson - the original point and click interface | http://twitter.com/hhrvoje, http://www.hudosvibe.net
14 godina
neaktivan
offline
Re: C# - Problemi i rješenja
hudo kaže...

 

Da, delegat moze primiti vise referenci. Evo primjer koda, natipkan ovako nabrzaka:

 

 

 

malo mi je jasnije sad,sta se tice ovoga sta sam citira valjda si mislia delegat može primiti više metoda koje če referencirati,a ne primiti više referenci jer bi on sam trebao bit referenca? kad smo več kod toga, objekti stoje na heap-u kojeg ima dosta al je spor, a reference stoje na stacku koji je dosta brži jel? naravno reference opet pokazuju na neki objekt koji je na heapu?

Nikad te necemo zaboraviti. RIP EnlightenedPhoenix 24.6.2011.
16 godina
offline
C# - Problemi i rješenja

Ja sam za sada na L2S, za moje potrebe vise nego dovoljan. Entity sam nesto cackao ali ne dovoljno da bi ga poceo zaozbiljno koristiti. Neznam koliko bih dobio prelaskom na njega.

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
 
0 0 hvala 0
16 godina
odjavljen
offline
Re: C# - Problemi i rješenja
hudo kaže...
Friday kaže...
hudo kaže...

 

dynamic product = Database.Open().Products.FindById(5);

Console.Write(product.Name);

 

ili ako se zeli mapirati rezultate upita na objekt:

 

Product product = Database.Open().Products.FindById(5);

 

 

Isto i sa L2S:

 

            var usdc = new UsersDataContext();
            dynamic usr = usdc.Users.FirstOrDefault(p => p.Id == 200);

            MessageBox.Show(usr.Naziv);

od kuda je ovaj usdc.Users? Moras ga kreirati putem designera ili nekako. U simple.data niti to nemoras, jerbo je sve dynamic. 

Znaci, file/new project, je sve sta moras napraviti. Dodas DLL od simple.data i conn string u config, i mozes upisati ovu liniju koju sam napisao!

 

Uh, to ne volim. To me nekako podsjeća na NOSQL/Ruby fore... i ovo gore što sam ja napisao mi je pretjerano. Više volim strongly-typed pristup...

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

@athlon64, evo ovdje je @Private objasnio delegate:
http://www.bug.hr/forum/topic/programiranje/c-delegati/67373.aspx

 
1 0 hvala 1
13 godina
neaktivan
offline
C# - Problemi i rješenja
Imam problem,ja pretvorim string to int i dobijem error.

private void button1_Click(object sender, RoutedEventArgs e)
{
int input1 = Convert.ToInt32(textBox1.Text);
int input2 = Convert.ToInt32(textBox2.Text);
MessageBox.Show("input1" * "input2");
}

To je jednostavna kaklulator aplikacija koja samo mnozi tako da je ocekivani unos u textbox int ali error je:

Error 1 Operator '*' cannot be applied to operands of type 'string' and 'string' C:\Users\David\AppData\Local\Temporary Projects\Kalkulator\MainWindow.xaml.cs 41 29 Kalkulator
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: C# - Problemi i rješenja
FireMan97 kaže...
Imam problem,ja pretvorim string to int i dobijem error.

private void button1_Click(object sender, RoutedEventArgs e)
{
int input1 = Convert.ToInt32(textBox1.Text);
int input2 = Convert.ToInt32(textBox2.Text);
MessageBox.Show("input1" * "input2");
}

To je jednostavna kaklulator aplikacija koja samo mnozi tako da je ocekivani unos u textbox int ali error je:

Error 1 Operator '*' cannot be applied to operands of type 'string' and 'string' C:\Users\David\AppData\Local\Temporary Projects\Kalkulator\MainWindow.xaml.cs 41 29 Kalkulator

 

 

Probaj ovo izmjeniti:

 

int input1 = Convert.ToInt32(textBox1.Text.ToString());

int input2 = Convert.ToInt32(textBox2.Text.ToString());

 

EDIT :

i ovo u poruci

int rezultat = input1 * input2;

MessageBox.Show(rezultat.ToString());

 

jer koliko vidim ti u poruci množiš dva stringa znaći sve unutar znakova " se tretira kao string, a operator množenja ne radi nad stringovima ( što bi bilo fora da radi LOL )

 

Poruka je uređivana zadnji put sri 14.3.2012 22:02 (woodgamesfx).
13 godina
neaktivan
offline
Re: C# - Problemi i rješenja
Napravio sam ovako:

private void button1_Click(object sender, RoutedEventArgs e)
{
//int input1 = Convert.ToInt32(textBox1.Text);
//int input2 = Convert.ToInt32(textBox2.Text);
int input1 = Convert.ToInt32(textBox1.Text.ToString());
int input2 = Convert.ToInt32(textBox2.Text.ToString());
MessageBox.Show(input1 * input2);
}

Errori:

Error 1 The best overloaded method match for 'System.Windows.MessageBox.Show(string)' has some invalid arguments C:\Users\David\AppData\Local\Temporary Projects\Kalkulator\MainWindow.xaml.cs 43 13 Kalkulator
Error 2 Argument 1: cannot convert from 'int' to 'string' C:\Users\David\AppData\Local\Temporary Projects\Kalkulator\MainWindow.xaml.cs 43 29 Kalkulator
15 godina
neaktivan
offline
C# - Problemi i rješenja

Jedna napomena :

 

kada radiš s neformatiranim unosima u tvom slučaju preko kontrole textbox tada obavezno kod koji prima unos ugnijezdi unutar try - catch bloka, npr. što ako netko umjesto broja ubaci niz alfabeta ili npr u tvom slučaju broj sa pomičnim zarezom. OK C3 je moderan jezik i vrlo vjerojatno će eliminitari dio iza decimalne točke i uzet u obzir samo cjei dio broja, ali opet postoji velika vjerojatnost da se program sruši.

 

Kod programiranja moraš uzimat u obzir sve možebitne situacije i pravino doskočit svim mogučim scenarijima.

 
1 0 hvala 0
15 godina
neaktivan
offline
Re: C# - Problemi i rješenja
FireMan97 kaže...
Napravio sam ovako:

private void button1_Click(object sender, RoutedEventArgs e)
{
//int input1 = Convert.ToInt32(textBox1.Text);
//int input2 = Convert.ToInt32(textBox2.Text);
int input1 = Convert.ToInt32(textBox1.Text.ToString());
int input2 = Convert.ToInt32(textBox2.Text.ToString());
MessageBox.Show(input1 * input2);
}

Errori:

Error 1 The best overloaded method match for 'System.Windows.MessageBox.Show(string)' has some invalid arguments C:\Users\David\AppData\Local\Temporary Projects\Kalkulator\MainWindow.xaml.cs 43 13 Kalkulator
Error 2 Argument 1: cannot convert from 'int' to 'string' C:\Users\David\AppData\Local\Temporary Projects\Kalkulator\MainWindow.xaml.cs 43 29 Kalkulator

 

 

Ubaci i ovo :

 

EDIT :

i ovo u poruci

int rezultat = input1 * input2;

MessageBox.Show(rezultat.ToString());

 

Poruka je uređivana zadnji put sri 14.3.2012 22:08 (woodgamesfx).
13 godina
neaktivan
offline
C# - Problemi i rješenja
Znam,al ovo radim samo za sebe,ovo mi je prvi "samostalni" program.
Moj PC  
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice