C# - Problemi i rješenja
- poruka: 2.151
- |
- čitano: 704.299
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Lično probao aspspider prije dvije godine, s obzirom da je besplatni .NET hosting, nema nekih zamjerki. :)
https://somee.com/default.aspx
Ovaj isto je dobar. Pristup MS SQL bazi je moguć i izvana preko Management Studija.
Ima li netko da bi mi htio malo pomoći, usmjeriti me malo
Trebao bih napraviti
pomoću C# ASP.NET i MS SQL a spominjao se i HTML5
1. Login, name i pass su u bazi u tablici, manje bitna enkripcija trenutno
I kad se ulogira uspješno
2. Nekakva responsive(dekstop, mobile ...) stranica, 2 stupca, ljevo su recimo imena iz baze, a desno kalendar,
te mogućnost po imenima označavanje nekog datuma u kalendaru. U bazi u drugoj tablici su datumi koji su povezani sa tablicom imena preko IDa.
Imam Visual studio 2015 i SQL express Studio instaliran, što i kako dalje?
Tutova koliko hoćeš... Googlaj web forme, forms auth, ajax, ado.net...
jel može neki sveobuhvatni tut po mogućnosti youtube po kojem bih se mogao orijentirati
ili bilo kakv gotov primjer
source
nešto
ovak ima previše toga a premalo vremena
Pozdrav!
Trebao sam napraviti kod koji računa je li broj Armstrongov ili nije, kad sam zapisao a^3=a*a*a je sve funkcioniralo.
Kad probam preko pow funkcije mi ne želi, odnosno za svaki broj dolazi da je *****.
Vjerovatno može i bez definiranja svih varijabli posebno, al sam mislio da je greška u tome jer u pow-u ne može biti računska operacija na mjestu baze al opet ne radi.
Može pomoć / savjet?
razlomi u što više koraka/linija
i gledaj stanja varijabli nakon svake odrađene linije
prije nego što izvršiš pojedinu liniju koda "ručno" izračunaj u glavi da možeš znati koju vrijednost očekuješ da će imat varijabla nakon što se izvrši linija a onda vidi u donjem prozorčiću Locals koliko će izbaciti tvoj program stiskom na (F10)
Ako treba upali prozorčić Locals, i ako treba dodaj posebno za svaku varijablu, zaokruži je i desni klik add watch
Pozdrav, imam pitanje, malo me muče delegati u C# ( ne razumijem ih baš potpuno, a uskoro ce mi dosta trebati)
pa ne kuzim zasto ovo ne radi?
Može li mi netko laički objasniti kada i zašto koristiti delegate? (čitao sam na milijun stranica ali i dalje ne razumijem zašto bi ja baš trebao koristiti delegate i u koje točno svrhe)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinFormTest
{
public partial class Form1 : Form
{
public enum State
{
None = 0,
Left,
Right
}
public delegate void StateHandler(State state);
public static event StateHandler StateChanged;
State state = new State();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
StateChanged(State.Left);
}
private void button2_Click(object sender, EventArgs e)
{
StateChanged(State.Right);
}
private void timer1_Tick(object sender, EventArgs e)
{
switch (state)
{
case State.None:
label1.Text = "Current state: none";
break;
case State.Left:
label1.Text = "Current state: left";
break;
case State.Right:
label1.Text = "Current state: right";
break;
}
}
}
}
Delegati su u biti referencni tipovi podataka koji u sebi sadrže referencu na funkciju, odnosno metod. Ta referenca može biti promijenjena u vremenu izvođenja programa, što delegate čini praktičnim za izvođenje funkcija jer sa delegatom se mogu izvoditi sve funkcije, odnosno metodi koji imaju iste argumente i povratnu vrijednost koja je deklarirana u delegatu.
U primjeru dolje sam pokazao kako sa varijablom multiKulti delegata tipa ZbrojiMnoziOduzmi pozivam tri različite funkcije, kojima je zajedničko broj i tip argumenata i povratna vrijednost.
Da bi to napravili, postupak je sljedeći:
1. Definiramo delegat, odnosno, povratnu vrijednost i argumente (kao što vidimo, te vrijednosti odgovaraju trima statičkim funkcijama, odnosno metodama).
delegate int ZbrojiMnoziOduzmi(int a, int b);
2. Deklariramo varijablu multiKulti koja je tip definirang delegata ZbrojiMnoziOduzmi
ZbrojiMnoziOduzmi multiKulti;
3. Inicijalizramo varijablu delegata prvi put
multiKulti = new ZbrojiMnoziOduzmi(Zbroji);
4. Pozivamo izabranu funkciju iz koraka tri, dakle, funkciju Zbroji preko varijable multikulti koja je tip delegata ZbrojiMnoziOduzmi (multiKulti(a, b)))
Console.WriteLine("Zbroj: {0}", multiKulti(a, b));, a istovremeno i ispisujemo njezinu povratnu vrijednost.
5. Postupak je isti kao 3. i 4. i za pozivanje ostalih dviju fuinkcija Mnozi i Oduzmi, s tim da sam za pozivanje zadnje funkcije Oduzmi inicijalizirao varijablu multiKulti delegata ZbrojiMnoziOdiuzmi skraćenim postupkom
multiKulti = Oduzmi;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Delegati
{
class Program
{
delegate int ZbrojiMnoziOduzmi(int a, int b);
static int Zbroji(int a, int b)
{
return a + b;
}
static int Mnozi(int a, int b)
{
return a * b;
}
static int Oduzmi(int a, int b)
{
return a - b;
}
static void Main(string[] args)
{
int a = 5, b = 3;
ZbrojiMnoziOduzmi multiKulti;
multiKulti = new ZbrojiMnoziOduzmi(Zbroji);
Console.WriteLine("Zbroj: {0}", multiKulti(a, b));
multiKulti = new ZbrojiMnoziOduzmi(Mnozi);
Console.WriteLine("Umnozak: {0}", multiKulti(a, b));
multiKulti = Oduzmi;
Console.WriteLine("Razlika: {0}", multiKulti(a, b));
}
}
}
Delegati su u biti referencni tipovi podataka koji u sebi sadrže referencu na funkciju, odnosno metod. Ta referenca može biti promijenjena u vremenu izvođenja programa, što delegate čini praktičnim za izvođenje funkcija jer sa delegatom se mogu izvoditi sve funkcije, odnosno metodi koji imaju iste argumente i povratnu vrijednost koja je deklarirana u delegatu.
U primjeru dolje sam pokazao kako sa varijablom multiKulti delegata tipa ZbrojiMnoziOduzmi pozivam tri različite funkcije, kojima je zajedničko broj i tip argumenata i povratna vrijednost.
Da bi to napravili, postupak je sljedeći:
1. Definiramo delegat, odnosno, povratnu vrijednost i argumente (kao što vidimo, te vrijednosti odgovaraju trima statičkim funkcijama, odnosno metodama).
delegate int ZbrojiMnoziOduzmi(int a, int b);
2. Deklariramo varijablu multiKulti koja je tip definirang delegata ZbrojiMnoziOduzmi
ZbrojiMnoziOduzmi multiKulti;
3. Inicijalizramo varijablu delegata prvi put
multiKulti = new ZbrojiMnoziOduzmi(Zbroji);
4. Pozivamo izabranu funkciju iz koraka tri, dakle, funkciju Zbroji preko varijable multikulti koja je tip delegata ZbrojiMnoziOduzmi (multiKulti(a, b)))
Console.WriteLine("Zbroj: {0}", multiKulti(a, b));, a istovremeno i ispisujemo njezinu povratnu vrijednost.
5. Postupak je isti kao 3. i 4. i za pozivanje ostalih dviju fuinkcija Mnozi i Oduzmi, s tim da sam za pozivanje zadnje funkcije Oduzmi inicijalizirao varijablu multiKulti delegata ZbrojiMnoziOdiuzmi skraćenim postupkom
multiKulti = Oduzmi;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Delegati
{
class Program
{
delegate int ZbrojiMnoziOduzmi(int a, int b);
static int Zbroji(int a, int b)
{
return a + b;
}
static int Mnozi(int a, int b)
{
return a * b;
}
static int Oduzmi(int a, int b)
{
return a - b;
}
static void Main(string[] args)
{
int a = 5, b = 3;
ZbrojiMnoziOduzmi multiKulti;
multiKulti = new ZbrojiMnoziOduzmi(Zbroji);
Console.WriteLine("Zbroj: {0}", multiKulti(a, b));
multiKulti = new ZbrojiMnoziOduzmi(Mnozi);
Console.WriteLine("Umnozak: {0}", multiKulti(a, b));
multiKulti = Oduzmi;
Console.WriteLine("Razlika: {0}", multiKulti(a, b));
}
}
}
Mislim da sad bolje razumijem to, zanima me samo još jedna stvar, recimo kad imamo delegat i event npr.
public delegate void NumberChanged(int x);
public static event NumberChanged OnChange;
što se točno događa? Zašto događaju treba delegat, mislim bilo bi mi jednostavnije za shvatiti u ovom slučaju što se točno događa kad mi pozovemo neki događaj,
pitam jer sam radio na nekom state-machineu u Unityju i tamo su mi trebali događaji i delegati koje ne kuzim potpuno.
Poznato ti je da na event pretplatiš event handler, koji se aktivira kad se dogodi event. Event handler nije ništa drugo nego funkcija koju pozoveš preko delegata čiji je event tip.
Dakle, ovdje smo na event pretplatili event handler, funkciju Pas(), a to smo mogli jer funkcija Pas() po argumentima i povratnoj vrijednosti odgovara delegatu OdrediLjubimca, čiji je event tip.
Kad se dogodii event, pozove se funkcija Pas(), odnosno event handler na koji je event pokazi pretplaćen.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Delegati
{
class Program
{
public delegate void OdrediLjubimca();
public static event OdrediLjubimca pokazi;
static void Pas()
{
Console.WriteLine("Pas");
}
static void Main(string[] args)
{
pokazi += new OdrediLjubimca(Pas);
pokazi.Invoke();
}
}
}
Naravno, to je osnova od osnove, a za tvoj primjer koji si mi dao, to bi izgledalo ovako:
Kad god metodom SetBroj namjestiš podatkovni član brojUKlasi aktivira se event koji te obavijesti o tome.
Taj zadatak se napravi ovako:
1. Definira se delegat Izmjena za koji smo ovdje odredili da ima void povratnu vrijednost i jedan int argument.
public delegate void Izmjena(int broj);
2. Deklarira se event noviBroj koji je tipa delegata Izmjena, što znači da se na njega može pretplatiti svaka funkcija koja odgovara delegatu Izmjena, void povratna vrijednost i jedan int argument.
public event Izmjena noviBroj;
3. U Set metodi nakon što izmjenimo podatkovni član brojUKlasi, dižemo event noviBroj, koji će pokrenuti event handler, odnosno metod na koji je event pretplaćen, event dižemo na način
noviBroj(a); , naravno, pošto je event noviBroj tipa delegata Izmjena, i on kad ga dižemo ima jedan int argument.
4. Event noviBroj pretplatimo na event handler ObavijestIzmjene, dakle, taj metod će se pozvati kad dignemo event u koraku 3. Bitno je napomeniuti da metod ObavijestIzmjene mora po povratnoj vrijednosti void i jednom int argumentu odgovarati delegatu Izmjena da bi ga mogli registrirati kao event handlera
primjer.noviBroj += new IzmjenaBroja.Izmjena(ObavijestIzmjene);
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Delegati
{
class IzmjenaBroja
{
private int brojUKlasi;
public delegate void Izmjena(int broj);
public event Izmjena noviBroj;
public void SetBroj(int a)
{
brojUKlasi = a;
noviBroj(a);
}
}
class Program
{
static void Main(string[] args)
{
IzmjenaBroja primjer = new IzmjenaBroja();
primjer.noviBroj += new IzmjenaBroja.Izmjena(ObavijestIzmjene);
primjer.SetBroj(5);
}
static void ObavijestIzmjene(int broj)
{
Console.WriteLine("Novi broj u klasi: {0}", broj);
}
}
}
Sad mislim da shvaćam, zahvaljujem na odgovoru, evo i dokaza da sad razumijem :D
class Program
{
public delegate void Operations(int x, int y);
public static event Operations OpsEvent;
static void Add(int x, int y)
{
Console.WriteLine(x + y);
}
static void Multiply(int x, int y)
{
Console.WriteLine(x * y);
}
static void Main(string[] args)
{
while (true)
{
var key = Console.ReadKey(true).Key;
if (key == ConsoleKey.Escape) return;
switch (key)
{
case ConsoleKey.Add:
OpsEvent += new Operations(Add);
OpsEvent(5, 5);
OpsEvent -= new Operations(Add);
break;
case ConsoleKey.Multiply:
OpsEvent += new Operations(Multiply);
OpsEvent(5, 5);
OpsEvent -= new Operations(Multiply);
break;
}
}
}
Tako je, to je to. Kad se pritisne key Add ili Multiply događa se event koji preko event handlera šalje ispis na konzolu, a prije toga izvrši zbrajanje ili množenje.
Nije mi žao i malo se potruditi i napisati par rečenica kad rezultat bude ovakav
Da, shvatio sam da je tako, a gle, meni je drago da si mi pomogao (i mozda nekome drugome), jer kažem,
čitao sam po netu što su delegati i kako se koriste ali mi ništa nije previše pomoglo jer je prekomplicirano objašnjeno, a i primjeri su mi nekako loši bili ...
Sve u svemu, još jednom hvala!
Može brzinsko objašnjenje ove linije
string[] lines =File.ReadAllLines(_path);
Znači, on će pročitati sve linije u fajlu koji se nalazi na lokaciji "_path" i svaku liniju spremiti kao jedno polje u polje stringova "lines"? Sad me zanima, pošto sam shvatio da je razlika polja i liste ta što polju moram definirati veličinu, a listi ne, gdje je ovdje definirana veličina polja?
Trebao bih pomoć oko same ideje kako ovo napraviti:
imam tri tekstualne datoteke koje su povezane na način:
1 - sifra_ulice, naziv_ulice
2 - sifra_naselja, naziv_naselja
3 - ime_i_prezime, sifra_ulice, sifra_naselja
sad bih trebao nešto skemijati i spojiti ove tri datoteke (ili array-a, ili list-a) i dobiti ovo:
ime_i_prezime, naziv_ulice, naziv_naselja
Ne treba biti nikakva baza jer podaci jednom kad se spoje nisu potrebni i idu van kao obični txt.
Redova u datoteci od par desetaka do par stotina.
Otvorim drugu datoteku, prelazim red po red i mjenjam iz treće datoteke šifru naselja sa nazivom.
Očito bih trebao polako prazniti treću datoteku i upisivati u pomoćnu (brzina).
Ima li neki 'programerskiji' način?
Može brzinsko objašnjenje ove linije
string[] lines =File.ReadAllLines(_path);
Znači, on će pročitati sve linije u fajlu koji se nalazi na lokaciji "_path" i svaku liniju spremiti kao jedno polje u polje stringova "lines"? Sad me zanima, pošto sam shvatio da je razlika polja i liste ta što polju moram definirati veličinu, a listi ne, gdje je ovdje definirana veličina polja?
Tako je, sve linije će spremiti u lines. Sama metoda ReadAllLines radi zauzimanje dovoljne količine memorije da ti pohrani cijeli sadržaj (sve linije), odnosno ona definira veličinu polja i tebi vraća samo referencu na polje stringova koje postoji i popunjeno je linijama iz datoteke. Duljini polja možeš pristupiti s lines.Length propertyem. Ako bi sam išao implementirati ovakvu metodu onda bi ti morao voditi računa o veličini polja i unutar metode bi morao reći koliko elemenata ti je potrebno. Da tu metodu ti sam ideš realizirati korištenjem liste, ne bi unaprijed morao reći koliko ima elemenata.
Trebao bih pomoć oko same ideje kako ovo napraviti:
imam tri tekstualne datoteke koje su povezane na način:
1 - sifra_ulice, naziv_ulice
2 - sifra_naselja, naziv_naselja
3 - ime_i_prezime, sifra_ulice, sifra_naselja
sad bih trebao nešto skemijati i spojiti ove tri datoteke (ili array-a, ili list-a) i dobiti ovo:
ime_i_prezime, naziv_ulice, naziv_naselja
Ne treba biti nikakva baza jer podaci jednom kad se spoje nisu potrebni i idu van kao obični txt.
Redova u datoteci od par desetaka do par stotina.
Otvorim drugu datoteku, prelazim red po red i mjenjam iz treće datoteke šifru naselja sa nazivom.
Očito bih trebao polako prazniti treću datoteku i upisivati u pomoćnu (brzina).
Ima li neki 'programerskiji' način?
To možeš riješiti sa LINQ, točnije operatorom join tako da spojiš prvu datoteku sa trećom, a za zajednički key field uzmeš properties SifraUlice, isto tako spojiš drugu datoteku sa trećom, a za zajednički key field uzmeš properties SifraNaselja, sa operatorom select izvršiš projekciju novog anonimnog tipa kojeg ti traže u zadatku. Ovdje nisam ulazio u to kako iz tekstualnih datoteka dobiti liste sa kojima sam radio. Koliko vidim po ispisu, stvari štimaju, zato sam uzeo prava imena ulica i naselja da se ne pogubim kod kontrole, a osobna imena sam izmislio.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Mjesto
{
class Ulica
{
public int SifraUlice {get; set;}
public string NazivUlice { get; set; }
}
class Naselje
{
public int SifraNaselja { get; set; }
public string NazivNaselja { get; set; }
}
class Adresa
{
public string ImeIPrezime { get; set; }
public int SifraUlice { get; set; }
public int SifraNaselja { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<Ulica> ulice = new List<Ulica>
{
new Ulica {SifraUlice=1, NazivUlice="Kraljice Mira" },
new Ulica {SifraUlice=2, NazivUlice="Kalelarga" },
new Ulica {SifraUlice=3, NazivUlice="Uskocka" },
new Ulica {SifraUlice=4, NazivUlice="Sibenska" },
new Ulica {SifraUlice=5, NazivUlice="Novigradska" },
new Ulica {SifraUlice=6, NazivUlice="Gospicka" },
new Ulica {SifraUlice=7, NazivUlice="Ninska ulica" }
};
List<Naselje> naselja = new List<Naselje>
{
new Naselje {SifraNaselja = 1, NazivNaselja="Poluotok" },
new Naselje {SifraNaselja=2, NazivNaselja="Smiljevac" },
new Naselje {SifraNaselja=3, NazivNaselja="Bili Brig" },
new Naselje {SifraNaselja=4, NazivNaselja="Stanovi" }
};
List<Adresa> adrese = new List<Adresa>
{
new Adresa {ImeIPrezime="Mate", SifraUlice=1, SifraNaselja=4 },
new Adresa {ImeIPrezime="Stipe", SifraUlice=7, SifraNaselja=4 },
new Adresa {ImeIPrezime="Marko", SifraUlice=2, SifraNaselja=1 },
new Adresa {ImeIPrezime="Ivana", SifraUlice=4, SifraNaselja=3 },
new Adresa {ImeIPrezime="Marija", SifraUlice=3, SifraNaselja=2 },
new Adresa {ImeIPrezime="Jure", SifraUlice=5, SifraNaselja=3 },
new Adresa {ImeIPrezime="Luca", SifraUlice=6, SifraNaselja=2 }
};
var rezultati =
from a in adrese
join u in ulice on a.SifraUlice equals u.SifraUlice
join n in naselja on a.SifraNaselja equals n.SifraNaselja
select new { a.ImeIPrezime, u.NazivUlice, n.NazivNaselja };
foreach(var n in rezultati)
{
Console.WriteLine(n);
}
}
}
}
Vjerujem da je to to!
Danke!
Može brzinsko objašnjenje ove linije
string[] lines =File.ReadAllLines(_path);
Znači, on će pročitati sve linije u fajlu koji se nalazi na lokaciji "_path" i svaku liniju spremiti kao jedno polje u polje stringova "lines"? Sad me zanima, pošto sam shvatio da je razlika polja i liste ta što polju moram definirati veličinu, a listi ne, gdje je ovdje definirana veličina polja?
Tako je, sve linije će spremiti u lines. Sama metoda ReadAllLines radi zauzimanje dovoljne količine memorije da ti pohrani cijeli sadržaj (sve linije), odnosno ona definira veličinu polja i tebi vraća samo referencu na polje stringova koje postoji i popunjeno je linijama iz datoteke. Duljini polja možeš pristupiti s lines.Length propertyem. Ako bi sam išao implementirati ovakvu metodu onda bi ti morao voditi računa o veličini polja i unutar metode bi morao reći koliko elemenata ti je potrebno. Da tu metodu ti sam ideš realizirati korištenjem liste, ne bi unaprijed morao reći koliko ima elemenata.
Hvala na odgovoru. To me zanimalo kako je riješeno definiranje veličine polja u ovom slučaju....
I sad još jedno pitanje :D Kada i visual studio idem raditi novi projekt koja je razlika između "windows form aplication" i "Windows Presentation Foundation." Za šta se šta koristi?
WPF koristi DirectX za iscrtavanje a Winforme GDI+. Uz to, za definiranje WPFa pišeš XAML i to ti daje malo više slobode nego sa winformama i možeš napraviti "ljepšu" aplikaciju.
publicclass UserProfile : BaseEntity
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public virtual User User { get; set; }
}
Počeo sam gledati nešto u vezi Entity Framework-a Code First, pa me zanima zašto se koristi virtualni član?
I zašto se kada imam vezu 1-1 koristi u jednoj klasi virtual a u drugoj ne koristi, a kad koristim 1-N obe klase sadrže virtuale članove sa ICollection<>?
Bok ljudi
imam jedno pitanje
naime radim jednostavnu desktop aplikaciju i tražim od korisnika da unese broj rečenica koliko želi unijeti
sad ja želim da mi se na sljedećem tabpageu pojavi upravo toliko textboxa ili rich textboxa
znam da su za to namijenjene dinamičke forme ali ako ima netko koji bi me uputio u to,budući da sam početnik u c#, bio bih zahvalan
pozdrav
private void button1_Click(object sender, EventArgs e)
{
for(int i = 0; i<=numericUpDown1.Value; i++)
{
flowLayoutPanel1.Controls.Add(new TextBox());
}
}
dobro napravio sam ovo
NumericUpDown content = new NumericUpDown();
FlowLayoutPanel panelAtContent = new FlowLayoutPanel();
private void button3_Click(...) {
content.Value = numberOfQuestions;
for (int i = 0; i <= content.Value; i++)
{
panelAtContent.Controls.Add(new TextBox());
}
}
ali ništa se nije dogodilo
oprosti ako te nisam dobro razumio, novi sam u c#
Odvuci flowlayoutplanel iz toolboxa na formu i koristi taj, nemoj svoj instancirati (ovaj vjerojatno nisi smjestio na formu)
evo popravio sam to ali opet se ne događa ništa
je li uredu ovo što sam stavio da je content.value = broju textboxeva
evo rijesio sam problem
samo kako cu malo namjestiti izgled i staviti enumeraciju
puno hvala
Kako se ništa ne događa? Na formu odvučeš numericUpDown, flowlayoutplanel i jedan gumb. U click event od gumba staviš kod koji u for petlji vrti do Value od tog numupdowna i u flowlayoutpanel dodaje textboxeve.
Nemoguće da ne radi - nešto si krivo napravio.