12.11.2011, 23:36 | #441 |
Član
Član od: 25.8.2010.
Poruke: 30
Zahvalnice: 3
Zahvaljeno 0 puta na 0 poruka
|
Re: How to... C#
uuh... muke sa xml.
nece i nece ne znam kako da napisem Name="" pod entery <entry name="Marko"><city>Beograd></city><number>06....xx</number></entry> takodje kada jednom napisem ok je...samo nema name="" pod entery ali kada ponovo napisem sa drugacije ime,grad,br ono izbrise ono predhodno i napise ovo novo... Ako moze neko da mi napravi primer za pisanje/citanje xml (ako moze sa objasnjenje) bicu mu doveka zahvalan... |
19.11.2011, 5:45 | #442 |
Veteran
|
Re: How to... C#
Ovako bih ja to uradio:
Citao: Kod:
//Deklarises listu negde List<EntryClaas> entryList = new List<EntryClaas>(); private void ReadXml(string p) { //p ti je path do fajla ili ceo string try { var doc = XElement.Load(p); var elements = from e in doc.Descendants("entry") select new { //Citas atribut "name" Name = e.Attribute("name").Value, //Citas elemente, tj. text izmedju njih //Ako ti na primer zatreba int stavis Age = int.Parse(e.Element("age").Value) itd. City = e.Element("city").Value, Number = e.Element("number").Value }; foreach (var item in elements) { //I ovde radis nesto sa podacima, ja obicno napravim npr. List<EntryClass> (gde je EntryClass klasa koju si ti napisao) i to popunjavam EntryClaas entry = new EntryClaas(); entry.EName = item.Name.ToString(); entry.ECity = item.City.ToString(); entry.ENumber = item.Number.ToString(); entryList.Add(entry); } } catch (Exception e) { MessageBox.Show("Unable to read xml file.\nError:\n" + e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } Kod:
public static void AddItem(EntryClass ec) { try { XElement doc = XElement.Load("putanja do tog fajla"); XElement newEntry = new XElement("entry", new XAttribute("name", ec.Name), new XElement("city", ec.City), new XElement("number", ec.Number) ); doc.Add(newEntry); doc.Save("putanja do tog fajla"); } catch (Exception e) { MessageBox.Show("Unable to add entry to xml file.\nError:\n" + e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } Kod:
public static void DeleteItem(string name) { //name je ime entry-a tj. atribut koje oces da izbrises try { var doc = XDocument.Load("putanja do tog fajla"); var element = (from x in doc.Root.Elements("entry") where x.Attribute("name").Value == name select x).FirstOrDefault(); element.Remove(); doc.Save("putanja do tog fajla"); } catch (Exception e) { MessageBox.Show("Unable to delete entry from xml file.\nError:\n" + e.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } Kod:
public class EntryClaas { public string EName { get; set; } public string ECity { get; set; } public string ENumber { get; set; } } Kod:
//I naravno da bi koristion LINQ moras da koristis: using System.Xml.Linq; //Za liste using System.Collections.Generic; |
11.12.2011, 0:03 | #443 |
Starosedelac
Član od: 16.2.2010.
Lokacija: Sremeska Kamenica
Poruke: 2.128
Zahvalnice: 103
Zahvaljeno 354 puta na 278 poruka
|
Re: How to... C#
moze pomoc oko prikazivanja sadrzaja hard diska u tree view kontroli...
ne znam ni kako da pocnem sa ubacivanjem svih stvari u tree view(sto je,jelte,i kljucan deo :s) |
12.12.2011, 0:55 | #444 |
Starosedelac
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.590
Zahvalnice: 919
Zahvaljeno 585 puta na 364 poruka
|
Re: How to... C#
Za pocetak ako googlas malo videc da ljudi predlažu da punjene treeview-a odradiš rekurzivno sto je losa praksa jer veci hard moze i ceo minut da drlja jer ulazi u sve foldere i puni treeview svime.
Ovde lik objasnio kako to moze da se uradi a da popunjava samo kad proširiš čvor (folder). http://stackoverflow.com/questions/2...ck-workarounds A imas ovde gotov primer, samo probaj da odradis svoju kontrolu jer ovo je prenatrpano. http://www.codeproject.com/KB/tree/t...wexplorer.aspx Za svoju upotrebu sam odradio kontrolu za foldere kao u total commanderu sa sve ikonicama i detaljima fajlova... tako da oko ikona ti mogu pomoci. Samo moras malo sam da gledas i tudji kod da pohvatas neke cake. |
12.12.2011, 16:28 | #445 |
Starosedelac
Član od: 10.12.2005.
Lokacija: ¯\_(ツ)_/¯
Poruke: 1.397
Zahvalnice: 811
Zahvaljeno 404 puta na 255 poruka
|
Re: How to... C#
Kako je najpametnije praviti pauzu i izvrsavanju neke funkcije a da se ne koristi sleep? Sleep mi ne odgovara jer se onda "blokira" ceo program. I jos nesto, u vezi sleep. Jer bi Application.DoEvents() ovo pomoglo?
EDIT: DoEvents pomaze nije bas responsive program, ali je mnogo bolje nego sto je bilo. Kod:
System.Threading.Thread.Sleep(Vreme / (int)brojRaspolozivihFrejmova4); //cca 40ms Application.DoEvents(); Poslednja ispravka: Eddy (12.12.2011 u 16:48) |
12.12.2011, 20:19 | #446 |
Starosedelac
Član od: 16.2.2010.
Lokacija: Sremeska Kamenica
Poruke: 2.128
Zahvalnice: 103
Zahvaljeno 354 puta na 278 poruka
|
Re: How to... C#
zanimljivo koliko se stvari razlikuju kod wpf i form aplikacija...
dosta samn guglavo i pronasao nesto sto me je zanimalo,ako mi bude trebalo jos pomoci znam kome da se obratim |
15.12.2011, 3:26 | #447 | |
Veteran
|
Re: How to... C#
Citat:
Kod:
protected void Delay(int ms) { DateTime end = DateTime.UtcNow.AddSeconds (ms); while (DateTime.UtcNow < end) { } } Kod:
protected void Delay(int ms) { int time = Environment.TickCount; while(true) if(Environment.TickCount - time >= ms) return; } |
|
Sledeći korisnik se zahvaljuje korisniku Ivan-94 na korisnoj poruci: | ||
Eddy (15.12.2011) |
15.12.2011, 10:15 | #448 |
Starosedelac
|
Re: How to... C#
^ U praksi se to ne radi, pošto bi trebalo izbegavati rad dugotrajnijih / zahtevnijih operacija na UI threadu.
Ili koristite ThreadPool.QueueUserWorkItem za kraće stvari, ili jednostavno napravite novi tread za nešto dugotrajnije. Time se UI neće blokirati, a na vama je samo da callbackove i/ili eventove sa threada. Tu je naravno i BackgroundWorker. Ukoliko je potrebno da piristupite UIu sa posebnog threada:
|
Sledeći korisnik se zahvaljuje korisniku MG-RAY na korisnoj poruci: | ||
Eddy (15.12.2011) |
15.12.2011, 10:31 | #449 |
Starosedelac
Član od: 10.12.2005.
Lokacija: ¯\_(ツ)_/¯
Poruke: 1.397
Zahvalnice: 811
Zahvaljeno 404 puta na 255 poruka
|
Re: How to... C#
Jel bi ti bilo ovako nesto?
Nisam siguran da sam dobro shvatio ovaj backgroundworker, ali tek sad cujem o tome. Jos nesto, pre nego ste se uopste upustim u ovo. Ako timer pici u nekom drugom threadu, jel i onda dolazi do njegovog kasnjenja? Znam da je pitanje neprecizno, ali ne znam bolje. Probao sam ovo moje uraditi bez sleep, ali sa tajmerom i veoma mi je neprecizno i gomila mi se kasnjenje. Sad cu da prostudiram ovo: http://www.albahari.com/threading/ http://msdn.microsoft.com/en-us/library/hybbz6ke.aspx http://msdn.microsoft.com/en-us/libr...v=VS.100).aspx Poslednja ispravka: Eddy (15.12.2011 u 10:43) |
15.12.2011, 11:20 | #450 | |
Starosedelac
|
Re: How to... C#
Citat:
|
|
15.12.2011, 11:51 | #452 | |
Starosedelac
|
Re: How to... C#
Naravno da ne, ovde smo da pomažemo međusobno...
Citat:
Ali, neke smernice:
Ako nam daš malo više informacija, dobićeš i bolji odgovor... |
|
Sledeći korisnik se zahvaljuje korisniku MG-RAY na korisnoj poruci: | ||
Eddy (15.12.2011) |
15.12.2011, 11:57 | #453 |
Starosedelac
Član od: 10.12.2005.
Lokacija: ¯\_(ツ)_/¯
Poruke: 1.397
Zahvalnice: 811
Zahvaljeno 404 puta na 255 poruka
|
Re: How to... C#
Ok, pogresno sam razumeo.
Inace pravim ovo: http://www.youtube.com/watch?v=QZ6yD...yBeeJ6kHog6Zv3 http://www.youtube.com/watch?v=aBgwu...WI75MnwPRKk1fu Jos pre dosta vremena sam isklucio konstantno renderovanje posto mi je bagovalo, i uvek sam renderovao samo jedan frame nakon neke promene. E sad kad sam to hteo uraditi sa ovim bw pucao je program. Kod:
private int TimeConsumingOperation(BackgroundWorker bw, int sleepPeriod) { int result = 0; Random rand = new Random(); while (!bw.CancellationPending) { bool exit = false; //tu bi trebao ubaciti operacije rotacije //Do some work glavnaforma.pokazivacnaogreform.mogreWin.nodeGlava.Yaw(Mogre.Math.DegreesToRadians(5f)); //glavnaforma.pokazivacnaogreform.mogreWin.root.RenderOneFrame(); //<--pravio mi je gresku pa sam prebacio iz renderoneloop u startrendereing Thread.Sleep(sleepPeriod); //ovo mi verovatno nece trebati ali neka ostane za sada if (exit) { break; } } return result; } Probacu sa ovako nekom metodom: Kod:
private int TimeConsumingOperation(BackgroundWorker bw, int sleepPeriod, float ugaoGlave, float ugaoUgaoPrviLeviZglob, float ugaoUgaoDrugiLeviZglob, float ugaoTreciLeviZglob) { } http://www.youtube.com/watch?v=0zFYy...ature=youtu.be Eh, konacno imam dovoljno da formulisem novo pitanje. Kako mogu iz ovog novog "threada" pozivati metode iz "starog"? Kako sam skontao treba nesto sa invoke. Dakle kako da izvrsim ovo btnRead.PerformClick(); iz backgroundworkera i valjda sa invoke. Poslednja ispravka: Eddy (15.12.2011 u 12:24) |
15.12.2011, 15:25 | #454 |
Starosedelac
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.590
Zahvalnice: 919
Zahvaljeno 585 puta na 364 poruka
|
Re: How to... C#
Posto radis neku izmenu na GUI-u sto jedino sme samo da radi taj thread koji je kreirao GUI (verovatno glavni), moras da Invoke-ujes metodu na tom threadu preko delegata (sad ne znam da li sam se dobro izjasnio, posto malo je komplikovana terminologija).
Ovo bi ti resilo verovatno problem: Kod:
glavnaforma.pokazivacnamainpulationfrom.btnRead.Invoke(new MethodInvoker(delegate() { glavnaforma.pokazivacnamainpulationfrom.btnRead.PerformClick(); })); Kod:
if( glavnaforma.pokazivacnamainpulationfrom.btnRead.InvokeRequired) { glavnaforma.pokazivacnamainpulationfrom.btnRead.Invoke(new MethodInvoker(delegate() { glavnaforma.pokazivacnamainpulationfrom.btnRead.PerformClick(); })); } else // obican poziv glavnaforma.pokazivacnamainpulationfrom.btnRead.PerformClick(); http://stackoverflow.com/questions/4...ead-in-c-sharp Info o MethodInvoker Delegate I setio sam se dobrog primera (post 305) u ovoj temi, koji mi je pomagao ovo da ti smislim. |
15.12.2011, 15:48 | #455 |
Starosedelac
Član od: 10.12.2005.
Lokacija: ¯\_(ツ)_/¯
Poruke: 1.397
Zahvalnice: 811
Zahvaljeno 404 puta na 255 poruka
|
Re: How to... C#
Eh, uspeo sam da resim pomocu nekog delegate tutorijala. Sa obzirom na rezultat u odnosu na ono resenje sa dve linije koda
Kod:
System.Threading.Thread.Sleep(Vreme / (int)brojRaspolozivihFrejmova4); //cca 40ms Application.DoEvents(); Svakako cu da uporedim ovo tvoje da vidim ima li razlike i kakve. EDIT: E to sam trazio, kako se to radi odmah u argumentima. Ja sam odradio malo komplikovanije, i ne pitajte me kako je ovo proradilo iz prve: Kod:
public delegate void klikniMe(); public klikniMe mojDelegat; public Manipulation(MainForm ulaz) { InitializeComponent(); glavna = ulaz; oforma = glavna.pokazivacnaogreform; dataForma = glavna.pokazivacnaDataGridFormform; mojDelegat = new klikniMe(klikniMeMetoda); } public void klikniMeMetoda() { btnRead.PerformClick(); //oforma.mogreWin.root.RenderOneFrame(); } Kod:
private int TimeConsumingOperation(BackgroundWorker bw, int sleepPeriod) { int result = 0; Random rand = new Random(); try { while (!bw.CancellationPending) { bool exit = false; //tu bi trebao ubaciti operacije rotacije //Do some work glavnaforma.pokazivacnaogreform.mogreWin.nodeGlava.Yaw(Mogre.Math.DegreesToRadians(5f)); if (glavnaforma.pokazivacnamainpulationform.btnRead.InvokeRequired) { if (glavnaforma.pokazivacnaNovuBazu.backgroundWorkerNovaBaza.IsBusy) glavnaforma.pokazivacnamainpulationform.Invoke(glavnaforma.pokazivacnamainpulationform.mojDelegat); //ovo iz nekog razloga radi } Thread.Sleep(sleepPeriod); //ovo mi verovatno nece trebati ali neka ostane za sada if (exit) { break; } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } return result; } Poslednja ispravka: Eddy (15.12.2011 u 15:56) |
15.12.2011, 16:31 | #456 |
Starosedelac
Član od: 10.12.2005.
Lokacija: ¯\_(ツ)_/¯
Poruke: 1.397
Zahvalnice: 811
Zahvaljeno 404 puta na 255 poruka
|
Re: How to... C#
Nov problem:
Zasto ne mego odraditi konverziju Kod:
uintKrajnjeVrednostiUglovaLIST[j - 2] = Convert.ToUInt64(red.Rows[0][j]); ne radi ni ovo: var tempi = Convert.ToUInt64(red.Rows[0][j].ToString()); EDIT: Radi sa int. A zar ne treba da bude uint kada se barata sa brojevima koji mogu biti negativni? Sad bas gledam, ni ranije nisam koristio uint, ne znam zasto mi je palo sad na pamet. Poslednja ispravka: Eddy (15.12.2011 u 17:03) |
15.12.2011, 17:04 | #457 |
Starosedelac
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.590
Zahvalnice: 919
Zahvaljeno 585 puta na 364 poruka
|
Re: How to... C#
Malo si se zabunio
uint - unsigned integer ... tj. samo pozitivni celi brojevi (0 to 4,294,967,295) int - sadrzi negativne (-2,147,483,648 to 2,147,483,647) Tako da ne mozes da stavis -60 u listu koja drzi samo uint, menjaj to sve na int (System.Int32) ili long (System.Int64). |
15.12.2011, 17:05 | #458 |
Starosedelac
Član od: 10.12.2005.
Lokacija: ¯\_(ツ)_/¯
Poruke: 1.397
Zahvalnice: 811
Zahvaljeno 404 puta na 255 poruka
|
Re: How to... C#
LoooooooooooooooooL
Unsigned, kako sam se zeznuo. I jos vrtim sebi u glavi, uint je signed...uint je signed. Kada zurim ko kreten, pa samo jos vise zeznem (hteo bih da mi ovo proradi do sutra ujutru). Izmenjao sam. Sreca pa mi je to doslo tek sada pa nisam napravio havariju. |
15.12.2011, 18:28 | #459 |
Član
|
Re: How to... C#
Pozdrav svima. Poceo sam da ucim C# pa se trenutno bavim klasama/metodima i odnosima izmedju njih. Da li postoji nacin da ovaj oznaceni deo koda smestim u poseban metod pa da ga odatle upotrebim? Nekako mi je neuredno da stoji u main metodu. [verovatno radim pogresno]
Takodje bih voleo da naucim da npr. sa tastature unesem 'prva' ili 'druga' [imena objekata u kodu] pa da mi na taj nacin primeni 'spec' metod na njih. Kod:
using System; class Kada { string ime; double zapremina; int cena; bool luksuzna; static void Main() { // OVO ODAVDE #################### Kada prva; prva = new Kada(); prva.ime = "Nadja"; prva.zapremina = 20.20; prva.cena = 1000; prva.luksuzna = false; Kada druga; druga = new Kada(); druga.ime = "Jadranka"; druga.zapremina = 60.44; druga.cena = 3000; druga.luksuzna = true; // DOVDE ######################## prva.spec(); Console.WriteLine("\n"); druga.spec(); } public void spec() { Console.Clear(); Console.WriteLine("Ova kada se zove " + this.ime + ", ima zapreminu " + this.zapremina + " litara, kosta " + this.cena + " evra i "); if (this.luksuzna == true) { Console.Write("spada medju luksuzne kade."); } else { Console.Write("nije luksuzna kada."); } } } Kod:
Console.WriteLine("Unesi kod kade."); string g = Console.ReadLine(); switch (g.ToLower()) { case "prva": { prva.spec(); break; } case "druga": { druga.spec(); break; } } Poslednja ispravka: RaKuN_s_NeOnKoM (15.12.2011 u 18:48) |
15.12.2011, 18:50 | #460 |
Starosedelac
Član od: 10.12.2005.
Lokacija: ¯\_(ツ)_/¯
Poruke: 1.397
Zahvalnice: 811
Zahvaljeno 404 puta na 255 poruka
|
Re: How to... C#
Pa sad, ja nisam neki programer. Ali jel pametno tako deklarisiti niz klasa Kada? Tojest ne znam sta hoces da postignes. Da se samo igras sa klasama ili da tako pravis razlike izmedju modela. Ako je ovo drugo, zar nije pametnije praviti neku bazu i baratati sa njenim vrednostima iz jedna klase npr?
Kazem, vrlo je moguce da sam i pogresno razumeo. |
Bookmarks sajtovi |
Tagovi |
c sharp, c# tutoriali, how to, visual studio |
|
|