Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

c# - debugging contacts deletion

[es] :: .NET :: c# - debugging contacts deletion

Strane: 1 2

[ Pregleda: 5928 | Odgovora: 33 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon c# - debugging contacts deletion27.11.2013. u 00:17 - pre 126 meseci
Pozdrav svima.

Stvar je sledeća:

Imam listview ispunjen kontaktima koji se čuvaju u XML file-u. Uzmimo za primer da tamo imam 5 ljudi. Ako pokušam da izbrišem svih 5 - nakon ponovnog startovanja programa - svih 5 će ponovo biti tamo, dakle, kao da ih nisam ni brisao. Moguće je od tih 5 obrisati samo 4 (ako ih imam 100, moguće je obrisati 99) - jedan će uvek ostati. Desi se i da nakon brisanja nekog kontakta, kada pokušam sledeći - ne uspevam ni da ga izbrišem, dakle pokušam da ga selektujem i javi se sledeći error:



Ključne stvari ovde su:

Code (csharp):

private void listView1_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0)
            {
                toolStripEdit.Enabled = false;
                RefreshAll();
                return;
            }
            Person person = new Person();
            person = FindPerson(listView1.SelectedItems[0].Text);
            txt_Name.Text = person.Name;
            txt_City.Text = person.Hometown;
            txt_Address.Text = person.Address;
            txt_Phone.Text = person.Phone;
            txt_Mail.Text = person.Email;
            txt_MoreInfo.Text = person.AdditionalInfo;
            dateTimePicker1.Value = person.Birthday;
            ReadOnlyON();
            toolStripEdit.Enabled = true;
            ExpandThis();
        }
 


i

Code (csharp):

void Rmv()
        {
            if (Properties.Settings.Default.Remove == true)
            {
                DialogResult dialogResult = MessageBox.Show("Are you sure you want to delete this contact?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dialogResult == DialogResult.Yes)
                {
                    Remove();
                    if (Properties.Settings.Default.Sync == true) { Sync(); }
                }
                else if (dialogResult == DialogResult.No)
                {
                    return;
                }
            }
            else
            {
                Remove();
                if (Properties.Settings.Default.Sync == true) { Sync(); }
            }
        }
        void Remove()
        {
            Person person = new Person();
            person = FindPerson(listView1.SelectedItems[0].Text);
            if (listView1.SelectedItems.Count > 0)
            {
                try
                {
                    if (listView1.SelectedItems.Count == 0) return;
                    people.RemoveAt(listView1.SelectedItems[0].Index);
                    foreach (ListViewItem eachItem in listView1.SelectedItems)
                    {
                        listView1.Items.Remove(eachItem);
                    }
                }
                catch { }
                ClearAll();
                ReadOnlyON();
            }
            else
            {
                MessageBox.Show("Nothing is selected!", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            ReadOnlyOFF();
            UserCount();
            if (Properties.Settings.Default.Sync == true) { Sync(); }
        }
 


Znači molim vas, spasavajte, lupam glavu oko ove gluposti koju vučem od samog početka i nikako da rešim.
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 13:15 - pre 126 meseci
proveri ovo
Code:
person = FindPerson(listView1.SelectedItems[0].Text);


sta se nalazi u person variable. Da li je null ili ima neku vrednost?
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 13:55 - pre 126 meseci
Nemoj zameriti, kako se to proverava?

Pokušao sam ovako:

Code:

private void checkToolStripMenuItem_Click(object sender, System.EventArgs e)
        {
            Person person = new Person();
            person = FindPerson(listView1.SelectedItems[0].Text);
            if (person == null) { MessageBox.Show("Yes"); }
            else { MessageBox.Show("No"); }
        }


znači da selektujem kontakt i onda izvršim tu proveru. Kaže No.
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 14:51 - pre 126 meseci
Mislio sam da stavis breakpoint na person

Code:
Person person = new Person(); //kreira instancu
            person = FindPerson(listView1.SelectedItems[0].Text); //ovde stavis breakpoint(F9) , i (F5) start with debugging  i vidis sta sadrzi person posle izvrsenja FindPerson methode. Trebalo bi u watch prozoru da imas person promenljivu tipa Person. 
            txt_Name.Text = person.Name;

http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 15:24 - pre 126 meseci
Znači, selektovao sam liniju:

Code:

person = FindPerson(listView1.SelectedItems[0].Text);


i Breakpoint ---> Insert Breakpoint

nakon toga, Start debugging. Runuje se program, kliknem jednom na neki kontakt i ne mogu uopšte više da se vraćam tamo, dok ne stisnem STOP.



Watch prazan...

Nadam se da sam te dobro razumeo.
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 16:02 - pre 126 meseci
Izvrsi tu liniju, pa vidi sta se nalazi u toj variabli, nesto ovako.
I ne zove se watch nego locals, moja greska.


[Ovu poruku je menjao AMD guy dana 28.11.2013. u 17:12 GMT+1]
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 16:12 - pre 126 meseci
Nadam se da je to ovo.

 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 16:18 - pre 126 meseci
Da, tako je.
Vidis da ti je Name property null pa ti zato zbog toga vraca "Object reference not set to an instance of an object".
Izgleda da moras da popunis person object sa podacima pa onda da radis Find, ovaki ti samo vraca praznu instancu.
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 16:24 - pre 126 meseci
OK, čini se da je problem dijagnostifikovan, rešavanje istog je još uvek science fiction za mene.

Hvala na odgovoru svakako.
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 16:30 - pre 126 meseci
Jel jos uvek koristis?
Code:
private Person FindPerson(string name)
{
    return people.Find(x => x.Name == name);
}


ovo ti radi pod predpostavkom da Name property vec ima vrednost i uporedjuje ga sa name parametrom koji je prosledjen FindPerson metodi, probaj da uradis proveru u toj metodi da li je Name property null ili ne, ako jeste onda ispisi poruku Name property ne moze biti null ili tako nesto ako nije onda uradi people.Find(x => x.Name == name); sacuvaj to u variabli tipa person i vrati(return) tu vrednost koja ce biti sacuvana ovde u person
person = FindPerson(listView1.SelectedItems[0].Text); //FindPerson ti vraca objekat tipa Person i to se cuva u person variabli.

http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 17:41 - pre 126 meseci
Da, još uvek koristim.

Prijatelju, evo lupam glavu već sat vremena šta i kako - uspeo sam da samo da napunim punu vreću neuspeha. Pokušavam da provalim šta je trebalo da uradim, ali ovo što sam uradio definitivno nije ono što si mislio. A evo i šta sam skarabudžio:

Code:

  private Person FindPerson(string name)
        {
            Person person = new Person(); 
            if (name == null)
            {
                MessageBox.Show("Name cannot be null");
            }
            else people.Find(x => x.Name == name);
            return person = FindPerson(listView1.SelectedItems[0].Text);
        }



 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 17:58 - pre 126 meseci
Citat:
A evo i šta sam skarabudžio:

Prava rec :)

Code (csharp):
private Person FindPerson(string name)
        {
            Person person = new Person();  //Vec si napravio instancu klase Person pre nego sto si pozvao FindPerson metodu, ne treba ti nova.
            //najbolje bi bilo da tu instancu stavis na klasni nivo(nivo klase), ovako kao sto si ti stavio ti kreira novu instancu klase cim opalis SelectedIndexChanged event. To ti predstavlja problem.

            //u if petlji treba da proveravas Name property Person klase a ne parametra koji saljes, probaj person.Name == null  
            //ispravka
            if (person.Name == null)
            {
                MessageBox.Show("Name cannot be null");
            }
             //ispravka.
            else { person = person.Find(x => x.Name == name); }
            return person;
        }


Ovo je pisano napamet, ne zameri ako ima neka greska, ali mislim da je idea dobra.

Primetio sam da i u Remove metodi imas isto novu instancu, Person person = new Person(); svaki put kada to uradis kreiras novi objekat na stack-u.
pogledaj malo objasnjenje ovde.



Jel si citao nesto o klasama, objektima, OOP itd?

[Ovu poruku je menjao AMD guy dana 28.11.2013. u 19:26 GMT+1]
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 18:26 - pre 126 meseci
Dakle, prvo što sam uradio jeste da sam izbrisao sledeće (svuda gde se pominje, a to je u Remove() i u ListviewSelectedIndexChanged):

Code (csharp):

Person person = new Person();
 


i tu liniju dodao van svih "voida", tj. odmah ispod:

Code (csharp):
 public Main()
        {
            InitializeComponent();
        }
 


Nakon toga, probao sam dve opcije sa FindPerson. Kao ovaj što si ti napisao, a i bez ovoga:

Code (csharp):

Person person = new Person();
 


Elem, zacrvenelo se kod:

Code (csharp):

else { person = [b]person[/b].Find(x => x.Name == name); }
 


... pa sam to što se crveni pokušao da zamenim sa people, jer je u originalnom kodu bilo tako (?). "Crvenilo" se povuklo i kod se uklopio.

Šta se dešava - runujem program, pokušam da selektujem nekog i iskoči MessageBox, nakon toga kada ponovo pokušam da selektujem - error.



Izgleda da su se više sile urotile protiv ove aplikacije.
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 18:46 - pre 126 meseci
I ova greska je dosta opisna, opet proveri koji je format i koji je opseg koji stoji u Birthday property-ju sa debugovanje kao sto sam ti pokazao za Name property.
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 18:58 - pre 126 meseci
Evo ga:



 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 19:24 - pre 126 meseci
Vidim da ti ne stoji neka vrednost u Birthday property-ju ono sto imas je neka default vrednost, pretpostavljam da nisi popunio person objekat sa vrednostima, jel si probao sa person.Birthday.Date?
Sta kaze datetimepicker koja je vrednost njegovog Value property-ja. Jel moguce dodeliti Birthday vrednost u datetimepicker.value?
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion28.11.2013. u 20:43 - pre 126 meseci
Evo probao sam da dodam .Date, isti se error javlja.

A što se tiče ovog value-a, jesi na ovo mislio?



Ja ne verujem koja komplikacija...
 
Odgovor na temu

tuolarips
Novi Sad

Član broj: 319492
Poruke: 74



+64 Profil

icon Re: c# - debugging contacts deletion01.12.2013. u 18:16 - pre 126 meseci
Niste na dobrom putu, pa bih uskocila u pomoc :)

Pre svega bih kod vratila u prvobitno stanje, a onda krenula sa ispravkama. Krenucu od inicijalnog problema, tj zasto se kontakti ne brisu i vracaju prilikom ponovnog startovanja aplikacije. Problem lezi u tome sto kontakte brises iz listview-a, ali ne i iz xml fajla koji ti predstavlja "bazu". Volela bih za pocetak da vidim kako popunjavas listview, da bih ti pomogla kako da permanentno obrises podatke.

Citat:
AMD guy: Da, tako je.
Vidis da ti je Name property null pa ti zato zbog toga vraca "Object reference not set to an instance of an object".
Izgleda da moras da popunis person object sa podacima pa onda da radis Find, ovaki ti samo vraca praznu instancu.


Sa ovim se ne bih slozila. Null pointer exception u njegovom slucaju ne moze da se dobije zbog toga sto je Name null. Obzirom da je kod sledeci:

txt_Name.Text = person.Name;

jasno je da null reference exception moze nastati samo ako je txt_Name null ili ako je person null. U slucaju da je Name null najgore sto bi se desilo jeste da Text polje txt_Name objekta takodje postane null.

Dakle, losa smernica vam je bila sto ste na osnovu onog breakpointa uopste konstatovali da se "Name" ne popunjava. Breakpoint stoji na liniji koda koja se jos nije izvrsila, a u person promenljivoj stoji default-no popunjen objekat nastao nakon ove linije "Person person = new Peson()". Od te konstatacije ste krenuli u skroz pogresnom smeru.

Sa komentarom da ne treba praviti nove objekte bespotrebno bih se skroz slozila, ali se ne bih slozila sa izdvajanjem person promenljive kao polje klase. To je za ovaj slucaj skroz pogresno i nije u skladu sa principima oop.

Ako se ja pitam, najvise bih volela kod u celosti, ispravila bih greske i komentarima obrazlozila ispravke. :)
"Time is a drug. Too much of it kills you." Terry Pratchett
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: c# - debugging contacts deletion01.12.2013. u 22:24 - pre 126 meseci
Imali smo malu diskusiju preko PP i tamo mi je dao link na jednu verziju svog programa. Ako zelis i ako se Cal slaze dao bih ti njegovu verziju, koja je za moj ukus malo preobimna za tako malu i jednostavnu aplikaciju.
Citat:
To je za ovaj slucaj skroz pogresno i nije u skladu sa principima oop.

To sam i ja primetio ali mi je Cal rekao da jos nije upoznat sa principima OOP pa ga zato nisam previse ispravljao na tom polju.
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Cal Lightman

Član broj: 317851
Poruke: 88
*.dynamic.sbb.rs.



+13 Profil

icon Re: c# - debugging contacts deletion01.12.2013. u 22:38 - pre 126 meseci
Rešenje ovog problema sastojalo se u sledećim izmenama:

Code (csharp):

void Remove()
        {
            Person person = new Person();
            try { person = FindPerson(listView1.SelectedItems[0].Text); }
            catch { return; }
            if (listView1.SelectedItems.Count > 0)
            {
                try
                {
                    if (listView1.SelectedItems.Count == 0) return;
                    foreach (ListViewItem eachItem in listView1.SelectedItems)
                    {
                        people.RemoveAll(x => x.Name == eachItem.Text);
                        listView1.Items[listView1.Items.Count - 1].Selected = true;
                        listView1.Items.Remove(eachItem);
                    }
                }
                catch { }
                ClearAll();
                ReadOnlyON();
            }
            else
            {
                MessageBox.Show("Nothing is selected!", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            ReadOnlyOFF();
            UserCount();
            Sync();
        }
 


Code (csharp):

 private void listView1_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            if (listView1.SelectedItems.Count == 0)
            {
                toolStripEdit.Enabled = false;
                RefreshAll();
                return;
            }

            try
            {
                Person person = new Person();
                person = people[people.FindIndex(0, x => x.Name == listView1.SelectedItems[0].Text && x.Name != null)];
                txt_Name.Text = person.Name;
                txt_City.Text = person.Hometown;
                txt_Address.Text = person.Address;
                txt_Phone.Text = person.Phone;
                txt_Mail.Text = person.Email;
                txt_MoreInfo.Text = person.AdditionalInfo;
                dateTimePicker1.Value = person.Birthday;
                ReadOnlyON();
                toolStripEdit.Enabled = true;
                ExpandThis();
            }
            catch (Exception ex)
            {
                return;
            }
        }
 


Code (csharp):

private void Main_FormClosing(object sender, FormClosingEventArgs e)
        {
            XmlDocument xDoc = new XmlDocument();
            string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string phonebook_path = path + "\\Phonebook\\Contacts.xml";
            xDoc.Load(phonebook_path);
            XmlNode xNode = xDoc.SelectSingleNode("People");
            xNode.RemoveAll();
            foreach (Person p in people)
            {
                XmlNode xTop = xDoc.CreateElement("Person");
                XmlNode xName = xDoc.CreateElement("Name");
                XmlNode xHometown = xDoc.CreateElement("Hometown");
                XmlNode xAddress = xDoc.CreateElement("Address");
                XmlNode xBirthday = xDoc.CreateElement("Birthday");
                XmlNode xPhone = xDoc.CreateElement("Phone");
                XmlNode xEmail = xDoc.CreateElement("Email");
                XmlNode xAdditionalInfo = xDoc.CreateElement("AdditionalInfo");
                xName.InnerText = p.Name;
                xHometown.InnerText = p.Hometown;
                xAddress.InnerText = p.Address;
                xBirthday.InnerText = p.Birthday.ToFileTime().ToString();
                xPhone.InnerText = p.Phone;
                xEmail.InnerText = p.Email;
                xAdditionalInfo.InnerText = p.AdditionalInfo;
                xTop.AppendChild(xName);
                xTop.AppendChild(xHometown);
                xTop.AppendChild(xAddress);
                xTop.AppendChild(xBirthday);
                xTop.AppendChild(xPhone);
                xTop.AppendChild(xEmail);
                xTop.AppendChild(xAdditionalInfo);
                xDoc.DocumentElement.AppendChild(xTop);
            }

            xDoc.Save(phonebook_path);
            Sync();
            SetStartup();
        }
 


@AMD guy:

U čemu se po tvom mišljenju ogleda obimnost ove aplikacije tj. šta bi ti oduzeo/izbacio?
 
Odgovor na temu

[es] :: .NET :: c# - debugging contacts deletion

Strane: 1 2

[ Pregleda: 5928 | Odgovora: 33 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.