Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 2.3.2012, 13:15   #501
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: How to... C#

Citat:
MG-RAY kaže: Pregled poruke
Za ostale tipove mi se čini da bi ti jednostavnije bilo da koristis Dictionary klasu da bi postigao to što želiš.
Jedno prosto pritanje, zbog čega Dictionary, a ne List kako sam mu ja predložio? Mislim da mu u njegovom slučaju ne treba Dictionary kolekcija.
Todors je offline   Odgovor sa citatom ove poruke
Stara 2.3.2012, 18:13   #502
ivan90BG
Veteran
 
Član od: 3.5.2008.
Lokacija: Beograd
Poruke: 760
Zahvalnice: 81
Zahvaljeno 213 puta na 144 poruka
Određen forumom Re: How to... C#

@Todors

Odakle ti ideja da sam pobrkao lončiće. Nekoliko puta sam napisao "referenca na string". Valjda to govori da znam da je string referentni tip.

Elem. Izgleda da je String.Intern ono što mi treba. A šteta što .net biblioteka nema kolekciju koja može ovo da radi za bilo koji objekat.
ivan90BG je offline   Odgovor sa citatom ove poruke
Stara 2.3.2012, 19:04   #503
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: How to... C#

@ivan

Ništa te ne sprečava da napišeš svoju, možda ovako nešto:

Spoiler za Code:

Kod:
using System;
using System.Collections.Generic;

namespace ForumPool
{
    class Program
    {
        static void Main()
        {
            // pravimo "pool"
            var pool = new Pool<Person>();

            // nekoliko osoba
            var p1 = new Person("albert", "wesker");
            var p2 = new Person("chris", "redfield");
            var p3 = new Person("jill", "valentine");

            pool.DoStuff(p1);
            pool.DoStuff(p2);
            pool.DoStuff(p3);

            Console.WriteLine("Has 3 elements:" + (pool.Count == 3));
            
            var p4 = new Person("chris", "redfield");
            Console.WriteLine("p2 == p4: " + (p2 == p4)); // true, zbog nacina na koji equals radi
            Console.WriteLine("p2 refEq p4: " + (ReferenceEquals(p2, p4))); // false, nisu isti objekat
            Console.WriteLine("p2ID == p4ID: " + (p2.ID == p4.ID)); // false, imaju razlicit id

            Console.WriteLine("\nP5:");
            var p5 = pool.DoStuff(new Person("chris", "redfield"));
            Console.WriteLine("p2 == p5: " + (p2 == p5)); // true, zbog nacina na koji equals radi
            Console.WriteLine("p2 refEq p5: " + (ReferenceEquals(p2, p5))); // true, jer je _pool vratio referencu koja se poklapa
            Console.WriteLine("p2ID == p5ID: " + (p2.ID == p5.ID)); // true, imaju isti ID



            Console.ReadKey();
        }
    }

    class Pool<TValue>
    {
        private readonly Dictionary<int, TValue> _pool;

        public Pool()
        {
            _pool = new Dictionary<int, TValue>();
        }

        public TValue DoStuff(TValue value)
        {
            var hash = value.GetHashCode();
            TValue storedValue;

            if (_pool.TryGetValue(hash, out storedValue))
            {
                return storedValue;
            }

            _pool[hash] = value;
            return value;
        }

        public int Count
        {
            get
            {
                return _pool.Count;
            }
        }
    }

    class Person : IEquatable<Person>
    {
        public Person(string firstName, string lastName)
        {
            FirstName = firstName;
            LastName = lastName;

            ID = Guid.NewGuid();
        }

        /// <summary>
        /// Indicates whether the current object is equal to another object of the same type.
        /// </summary>
        /// <returns>
        /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.
        /// </returns>
        /// <param name="other">An object to compare with this object.</param>
        public bool Equals(Person other)
        {  
            if (ReferenceEquals(null, other)) return false;
            if (ReferenceEquals(this, other)) return true;
            return Equals(other.FirstName, FirstName) && Equals(other.LastName, LastName);
        }

        

        /// <summary>
        /// Determines whether the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>.
        /// </summary>
        /// <returns>
        /// true if the specified <see cref="T:System.Object"/> is equal to the current <see cref="T:System.Object"/>; otherwise, false.
        /// </returns>
        /// <param name="obj">The <see cref="T:System.Object"/> to compare with the current <see cref="T:System.Object"/>. </param><filterpriority>2</filterpriority>
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if (obj.GetType() != typeof(Person)) return false;
            return Equals((Person)obj);
        }

        /// <summary>
        /// Serves as a hash function for a particular type. 
        /// </summary>
        /// <returns>
        /// A hash code for the current <see cref="T:System.Object"/>.
        /// </returns>
        /// <filterpriority>2</filterpriority>
        public override int GetHashCode()
        {
            unchecked
            {
                return ((FirstName != null ? FirstName.GetHashCode() : 0) * 397) ^ (LastName != null ? LastName.GetHashCode() : 0);
            }
        }

        public static bool operator ==(Person left, Person right)
        {
            return Equals(left, right);
        }

        public static bool operator !=(Person left, Person right)
        {
            return !Equals(left, right);
        }

        public string FirstName { get; private set; }
        public string LastName { get; private set; }

        public Guid ID { get; private set; }
    }
}


Naravno, u zavisnosti od toga šta radiš ovo može biti potpuno pogrešno, plus, za stringove bi trebao da koristiš ono što sam ti ranije pomenuo (ako uopšte ima smisla, obzirom da stringovi već dele interni pool, kao što si pretpostavljam pročitao).

@Todors:
Doctionary je u ovom slučaju optimalnije rešenje, obzirom da je pretraga liste uglavnom sporija, u zavisnosti od broja elemenata.

Poslednja ispravka: MG-RAY (2.3.2012 u 19:22)
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 2.3.2012, 20:56   #504
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: How to... C#

@ivan90BG

Izvinjavam se , morao sam nekoliko puta da pročitam to što si napisao da bih shvatio šta si pitao.

Mislim da ti je ipak mnogo bolje rešenje da koristiš StringBuilder nego da koristiš String.Intern() i da tako drljaš po groblju stringova . Mogu ti se tako dešavati žešći bagovi, čak ti na to i microsoft ukazuje.

@MG-RAY
OK, jedino ako su perfomance u pitanju, ali onda bi možda bilo bolje da koristi SortedList i BinarySearch ako su mu performanse na prvom mestu.

Kod tebe je možda je bolje da si odma stavio da ti TKey bude tipa GUID, jer je ovako kako si ti stavio je daleko veća šansa da ti se ponovi int i izazove bag. Guid pretraživanje nije mnogo sporije od int-a, ali opet s druge strane ostavlja mnogo manje prostora da se dogodi ponavljanje.
Todors je offline   Odgovor sa citatom ove poruke
Stara 3.3.2012, 13:37   #505
irreal
V.I.P. Programiranje
 
Član od: 9.1.2009.
Lokacija: Beograd, Banovo Brdo
Poruke: 1.157
Zahvalnice: 83
Zahvaljeno 448 puta na 303 poruka
Određen forumom Re: How to... C#

ako je vec zapeo za listom, ne vidim zasto ne bi nasledio klasu lista i prepravio add, remove i druge relavantne metode. add metoda moze da mu vraca referencu ka upravo dodatom objektu ili ka prethodnom ukoliko takav vec postoji i eto, dobio je upravo ono sto je trazio.

Sama implementacija pretrage pa i pool-a moze da bude raznolika u zavisnosti od potrebe za optimizacijom i performansama.
irreal je offline   Odgovor sa citatom ove poruke
Stara 3.3.2012, 13:47   #506
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: How to... C#

@Todors
Mislim da nisi shvatio poentu mog predloga (i zadatka). Ideja i jeste u tome da se za iste vrednosti dobije isti hash koji se kasnije koristi za pretragu.

ID je samo zbog testiranja tu, ništa više.

Takođe, ako imaš bolje rešenje, slobodno ga postavi.

Radio sam neke testove performansi sa Hashmapama (Dictionary) i klasičnim listama. Evo rezultata:

Spoiler za 49K elemenata, 0,14% šansi za poklapanje vrednosti:



Spoiler za 5K elemenata, 3% šansi za iste vrednosti:




Na X osi je broj elemenata, na Y je vreme izvrsavanja u ms.

Videcu da odradim kasnije nesto i za druge kolekcije (sortirane)
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 4.3.2012, 14:52   #507
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: How to... C#

Jel si izmerio. Baš me zanima.
Todors je offline   Odgovor sa citatom ove poruke
Stara 7.3.2012, 10:16   #508
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: How to... C#

Citat:
Todors kaže: Pregled poruke
Jel si izmerio. Baš me zanima.
Nisam još uvek, kada uhvatim malo slobodnog vremena, onda ću. Ako te zanima, postaviću source pa pokušaj.
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 21.4.2012, 12:54   #509
Luigi
Član
 
Član od: 8.7.2009.
Lokacija: Novi Sad
Poruke: 43
Zahvalnice: 9
Zahvaljeno 0 puta na 0 poruka
Slanje poruke preko Skypea korisniku Luigi
Određen forumom Re: How to... C#

Da ne otvaram novu temu, a treba mi pomoć oko C#.
Imam matricu textBox-eva u C# formi, koji se redom zovu textBox1, textdBox2, ... Na koji način bi mogao pristupiti n-tom text boxu? Mislim na primera, treba mi promeniti pozadinu u textBox20. Da je to konstantno kucao bi
Kod:
textBox20.BackColor = Color.Red
ali to je promenljivo pa moram pristupati preko neke promenljive. Pa ako bi mi neko znao reći na koji način je to moguće uraditi?
Luigi je offline   Odgovor sa citatom ove poruke
Stara 21.4.2012, 13:02   #510
Geomaster
V.I.P. Programiranje
 
Član od: 28.6.2007.
Lokacija: Beograd
Poruke: 2.342
Zahvalnice: 2.836
Zahvaljeno 1.047 puta na 507 poruka
Slanje poruke preko MSN-a korisniku Geomaster Slanje poruke preko Skypea korisniku Geomaster
Određen forumom Re: How to... C#

Možeš reference na textboxove smestiti u niz što i nije praktično, ili možda C# nudi neki način da se napravi niz kontrola direktno iz dizajnera (u staroj VB6ici je postojala jako dobra stvar "control array" koja je radila upravo to).
Geomaster je offline   Odgovor sa citatom ove poruke
Stara 21.4.2012, 14:27   #511
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.589
Zahvalnice: 916
Zahvaljeno 584 puta na 363 poruka
Određen forumom Re: How to... C#

Ne znam kako si ih stavljao na formu, ali najbolji nacin da to uradis je preko koda, tada mozes svakom text boxu da podesis polje recimo na textBoxXX.Name = "n m" ,gde n i m su kordinate u matrici. Ja sa nesto slicno radio sa panelima i evo primer.

Kod:
public partial class Form1 : Form
{
    public const int n = 19;
    public const int m = 19;

    private System.Windows.Forms.Panel[,] Grid = new Panel[n, m];

    // form constructor
    public Form1()
    {
        PlaceGridPanels();
        InitializeComponent();
    }

    private void PlaceGridPanels()
    {
        this.SuspendLayout();
        for (int i = 0; i < GRID_SIZE; i++)
        {
            for (int j = 0; j < GRID_SIZE; j++)
            {
                this.Grid[i, j] = new System.Windows.Forms.Panel();

                this.Grid[i, j].BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                this.Grid[i, j].Location = new System.Drawing.Point((i * 28) + 1, (j * 28) + 1);
                // po ovome ih razpoznajes
                this.Grid[i, j].Name = i.ToString() + " " + j.ToString();
                this.Grid[i, j].Size = new System.Drawing.Size(28, 28);
                this.Grid[i, j].TabStop = false;
                this.Grid[i, j].BackColor = Color.FromName("White");
                Grid[i, j].Click += new EventHandler(Grid_Cell_Click); // ovo je meni trebalo
                this.Controls.Add(Grid[i, j]);
            }
        }
        this.ResumeLayout(false);
    }
}
zokocx je offline   Odgovor sa citatom ove poruke
Stara 21.4.2012, 14:35   #512
voodoo_
V.I.P. GNU/Linux
 
Avatar korisnika voodoo_
 
Član od: 1.11.2005.
Poruke: 11.162
Zahvalnice: 2.079
Zahvaljeno 4.921 puta na 2.857 poruka
Određen forumom Re: How to... C#

Citat:
Luigi kaže: Pregled poruke
Da ne otvaram novu temu, a treba mi pomoć oko C#.
Imam matricu textBox-eva u C# formi, koji se redom zovu textBox1, textdBox2, ... Na koji način bi mogao pristupiti n-tom text boxu? Mislim na primera, treba mi promeniti pozadinu u textBox20. Da je to konstantno kucao bi
Kod:
textBox20.BackColor = Color.Red
ali to je promenljivo pa moram pristupati preko neke promenljive. Pa ako bi mi neko znao reći na koji način je to moguće uraditi?
Npr.

Kod:
for (int i = 1; i < 20; i++)
    ((TextBox) Controls.Find("textBox" + i, false)[0]).BackColor = Color.Red;
ili

Kod:
TextBox t = null;
for (int i = 1; i < 20; i++)
{
    t = Controls.Find("textBox" + i, false)[0] as TextBox;
    t.BackColor = Color.Red;
}
voodoo_ je offline   Odgovor sa citatom ove poruke
Stara 21.4.2012, 15:57   #513
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: How to... C#

Evo napravio sam ti mali programčić kojim možeš lako da pretražuješ kontrole i da ih menjaš po potrebi.
Priloženi fajlovi
Tip fajla: zip testFindControles.zip (16,4 KB, 14 puta viđeno)
Todors je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Todors na korisnoj poruci:
Luigi (22.4.2012)
Stara 22.4.2012, 22:31   #514
Luigi
Član
 
Član od: 8.7.2009.
Lokacija: Novi Sad
Poruke: 43
Zahvalnice: 9
Zahvaljeno 0 puta na 0 poruka
Slanje poruke preko Skypea korisniku Luigi
Određen forumom Re: How to... C#

Citat:
Kod:
TextBox t = null;
for (int i = 1; i < 20; i++)
{
    t = Controls.Find("textBox" + i, false)[0] as TextBox;
    t.BackColor = Color.Red;
}
Hvala puno, ovo sam uspešno primenio na dati problem i odlično odrađuje posao.
Luigi je offline   Odgovor sa citatom ove poruke
Stara 28.4.2012, 13:55   #515
Cira93
Član
 
Član od: 31.10.2009.
Poruke: 109
Zahvalnice: 29
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: How to... C#

Eto ja kao odlucio da vezbam malo c# van skole, posto je gradivo svedeno na osnove osnovnih stvari, ali nebitno.
Hteo sam da napravim kopije nekih mini igara (soliter, minesweeper), prost editor slika i editor teksta. Zanimlivo je da sam na netu nasao samo tutorijale za editor teksta, trazio sam trazio ali nista. tj nasao sam za editor slika ali je malo iznad mog nivoa znanja
Pa reko da vidim jel ima ovde neka dobra dusa da mi pomogne u potrazi za tim tutorijalima, jer stvarno nemam ideju sta vise da kucam u pretrazivacu, a dug je vikend
Cira93 je offline   Odgovor sa citatom ove poruke
Stara 29.4.2012, 13:21   #516
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.589
Zahvalnice: 916
Zahvaljeno 584 puta na 363 poruka
Određen forumom Re: How to... C#

Probaj da odradis prvo Notepad kopiju a posle napredniju verziju Wordpad. Evo za pocetak:
http://www.c-sharpcorner.com/uploadf...ad-in-C-Sharp/
http://forum.codecall.net/topic/4533...-notepad-in-c/
http://www.csharpfriends.com/article...x?articleid=84

Ali ako ne znas bas neke osnovnije stvari, onda uci prvo to.
zokocx je offline   Odgovor sa citatom ove poruke
Stara 29.4.2012, 17:35   #517
Cira93
Član
 
Član od: 31.10.2009.
Poruke: 109
Zahvalnice: 29
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: How to... C#

Napravio sam Notepad, oko obrade teksta i rada sa rich text boxom nemam problema, dosta je pojednostavljeno, bukvalno se pola stvari kodira u jednom redu, dok za obradu slika moraju da se pisu markovi konaci za komande tipa rotate, resize itd. pa sam mislio da mi neko sa malo vise znanja pokaze kako se najjednostavnije te opcije napisu.

Nasao sam tutorijal za igru memorije, malo cu se oko toga poigrati pa cu videti da izvucem iz toga nesto za minesweeper.
Cira93 je offline   Odgovor sa citatom ove poruke
Stara 9.6.2012, 14:21   #518
Cira93
Član
 
Član od: 31.10.2009.
Poruke: 109
Zahvalnice: 29
Zahvaljeno jedanput na jednoj poruci
Određen forumom Re: How to... C#

Ok, za sad sam napravio

Notepad
Paint
Minice
Konverter cirilice u latinicu
pik, pik, skocko, tref igru
pogodi pojam igru
Milioner igru
i zavrsavam igru memorije, ali ne mogu da je zavrsim jer ne znam kako da odradim da kada se otvore dva polja,a da nisu ista, ne mogu da se otvore nova jednu sekundu, a onda se ta dva polja zatvore. Treba mi ovo za sutra, tako da se nadam da ce neko da procita ovo i resi problem
Cira93 je offline   Odgovor sa citatom ove poruke
Stara 9.6.2012, 19:00   #519
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.589
Zahvalnice: 916
Zahvaljeno 584 puta na 363 poruka
Određen forumom Re: How to... C#

To moras sa tajmerom da odradis,i ovako bi islo:
1.) kad otvoris 1. polje ono stoji otvoreno
2.) kad se otvori 2. polje a nisu ista onda moras sva ostala polja da im stavis
2.a) enable=false; (sad ne znam koju si kontrolu upotrebio)
2.b) ili da im unregistrujes click eventove (-=) ali ovo po meni je prljavo resenje jer ako ih ima puno skuplje je sto se tice performasi, jer ce morati ponovo da ih registrujes (+=).
3.) cim se aktivnost sa poljima iskljuci aktiviras Timer Class da posle sekunde zatvori ova 2 polja.
Moze ovo da se resi na par slicnih nacina ali zaviis i kako si odradio i ostale delove.
zokocx je offline   Odgovor sa citatom ove poruke
Stara 10.6.2012, 12:26   #520
Sheldon Cooper
Član
 
Član od: 26.10.2011.
Poruke: 43
Zahvalnice: 12
Zahvaljeno 17 puta na 6 poruka
Određen forumom Re: How to... C#

Imam problem sa button text. Pravim kalkulator kao maturski rad i ne znam kako da mi tekst button kontrola prikaze superscript, subscript, kosntatnu Pi i ostalo. Funkcije su tu, napisane, kod nije problem, samo izgled buttona. Hvala unapred
Sheldon Cooper je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Tagovi
c sharp, c# tutoriali, how to, visual studio

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno



Sva vremena su po Griniču +2 h. Sada je 8:58.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com