Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Odkaz není nastaven na instanci objektu

Aktivity
Avatar
matesax
Tvůrce
Avatar
matesax:12.6.2012 18:26
for (int cislo = 0; this.kter[cislo].Contains(@"\"); cislo++)
           {
               try
               {
                   if (this.cocu == 1)
                   {
                       this.tam = this.treeView1.SelectedNode.FullPath + @"\";
                       string qp;

                       if ((qp = Microsoft.VisualBasic.Interaction.InputBox("Zadejte jméno souboru:", Path.GetFileName(kter[cislo]), Path.GetFileName(kter[cislo]))) != "")
                           this.tam += qp;
                       else
                           this.tam += Path.GetFileName(kter[cislo]);

                       if (this.tam.Contains(@"\\"))
                           this.tam = this.tam.Replace(@"\\", @"\");

                       File.Copy(kter[cislo], tam, true);
                   }
                   else
                   {
                       this.tam = this.treeView1.SelectedNode.FullPath + @"\" + Path.GetFileName(kter[cislo]);
                       if (this.tam.Contains(@"\\"))
                           this.tam = this.tam.Replace(@"\\", @"\");
                       FileInfo fInfo = new FileInfo(kter[cislo]);
                       fInfo.MoveTo(tam);
                   }
               }
               catch (Exception n)
               {
                   MessageBox.Show(n.Message, "Error - Chyba");
               }
           }

Chyba se projevuje skoro na začátku - ve výrazu int cislo = 0; Vše proběhne v pořádku - jen se zobrazí tato hláška. Vadí to? Popř. - co s tím? Děkuji.

 
Odpovědět
12.6.2012 18:26
Avatar
David Jančík
Vlastník
Avatar
David Jančík:12.6.2012 18:58

Nebylo by lepší použít foreach?

foreach (string file in this.kter)

Chyba je způsobená nejspíš tím, že pole "kter" není deklarované.

Nebo, že saháš někam, kde nic není.

Nahoru Odpovědět
12.6.2012 18:58
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:12.6.2012 18:59

Musíš kromě přítomnosti lomítka na prvním řádku kontrolovat i jestli je cislo <= this.kter.Length ;) Jinak bych tam dal while cyklus na tohle.

Nahoru Odpovědět
12.6.2012 18:59
You are the greatest project you will ever work on.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:12.6.2012 19:14

OK - vím kde je problém - neumím zastavit cyklus v čas - potřebuji spočítat počet prvků v poli kter - ale to lenght není ono - cyklus se nazastavil vůbec.

Nevím, proč bych to zesložiťoval whilem - pak bych pocet musel definovat mimo akoráte,...

Jak funguje to foreach - když narazí na prázdno ukončí se? To by pak asi bylo nejlepší - vyzkouším,...

 
Nahoru Odpovědět
12.6.2012 19:14
Avatar
matesax
Tvůrce
Avatar
matesax:12.6.2012 19:19

Tak u foreach se mi cyklus zase neukončí,...

 
Nahoru Odpovědět
12.6.2012 19:19
Avatar
matesax
Tvůrce
Avatar
Odpovídá na matesax
matesax:12.6.2012 19:22
foreach (string acstr in this.kter)
           {
               try
               {
                   if (this.cocu == 1)
                   {
                       this.tam = this.treeView1.SelectedNode.FullPath + @"\";
                       string qp;

                       if ((qp = Microsoft.VisualBasic.Interaction.InputBox("Zadejte jméno souboru:", Path.GetFileName(acstr), Path.GetFileName(acstr))) != "")
                           this.tam += qp;
                       else
                           this.tam += Path.GetFileName(acstr);

                       if (this.tam.Contains(@"\\"))
                           this.tam = this.tam.Replace(@"\\", @"\");

                       File.Copy(acstr, tam, true);
                   }
                   else
                   {
                       this.tam = this.treeView1.SelectedNode.FullPath + @"\" + Path.GetFileName(acstr);
                       if (this.tam.Contains(@"\\"))
                           this.tam = this.tam.Replace(@"\\", @"\");
                       FileInfo fInfo = new FileInfo(acstr);
                       fInfo.MoveTo(tam);
                   }
               }
               catch (Exception n)
               {
                   MessageBox.Show(n.Message, "Error - Chyba");
               }
           }
 
Nahoru Odpovědět
12.6.2012 19:22
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:12.6.2012 19:25

Rovnou se zde zeptám - jak vymazat pole? Ne pole - ale všechny věci v něm. :)

 
Nahoru Odpovědět
12.6.2012 19:25
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na matesax
David Jančík:12.6.2012 19:38

Redeklarací, nebo cyklem.

pole = new datTyp[počet];

Ale v C# je lepší používat dynamické pole (List<>, Dictionary<>)

Nahoru Odpovědět
12.6.2012 19:38
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na matesax
David Jančík:12.6.2012 19:42

Nechápu, odstraň logiku a nech vypisovat do Debug konzole co je v proměnné acstr. Tím bys měl chybu objevit. Foreach projede všechny prvky v poli u posledního skončí.

Nahoru Odpovědět
12.6.2012 19:42
Zapomeň, že je to nemožné a udělej to ;)
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:12.6.2012 19:42

Děkuji - a ten forech nechápu - proč nefunguje,... Mám něco špatně v kódu?

 
Nahoru Odpovědět
12.6.2012 19:42
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:12.6.2012 19:46

Tak tuším v čem bude háček - napsal jsi všechny - a já mám hranice 9999 - takže pokud projíždí 9999 prvků, tak se nedivím, jak bych tedy měl přizpůsobovat hranice pole příchozím prvkům?

 
Nahoru Odpovědět
12.6.2012 19:46
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na matesax
David Jančík:12.6.2012 19:49

Použij dynamické pole (kolekci).

List<string> kter = new List<string>();
kter.Add("blah blah");

// pak klasicky
foreach (string acstr in kter)
...

Navíc máš možnosti vyhledávání - Contains. Nemusíš předem specifikovat velikost etc...

Nahoru Odpovědět
12.6.2012 19:49
Zapomeň, že je to nemožné a udělej to ;)
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:12.6.2012 19:53

A vjakém namespace se List<string> nachází?

 
Nahoru Odpovědět
12.6.2012 19:53
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:12.6.2012 19:54

Nevíme, co ten kód dělá, takže ti ho těžko opravíme. V tom prvním jsi vyjížděl za hranice pole, proto ta chyba.

Nahoru Odpovědět
12.6.2012 19:54
You are the greatest project you will ever work on.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:12.6.2012 19:58

Řekl bych, že sczdavos mi pomohl - jen se mi nedaří zprovoznit to dynamické pole,...

 
Nahoru Odpovědět
12.6.2012 19:58
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Jančík
matesax:12.6.2012 20:09

Kde mám definovat List? Děkuji.

 
Nahoru Odpovědět
12.6.2012 20:09
Avatar
matesax
Tvůrce
Avatar
Odpovídá na matesax
matesax:12.6.2012 20:15

Je to System.Collec­tions.Generic. Děkuji všem. :)

 
Nahoru Odpovědět
12.6.2012 20:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 17 zpráv z 17.