Avatar
NeonMaster
Člen
Avatar
NeonMaster:

Ahoj. Mám problém nemůžu změnit text v textBoxu z jiné třídy v pohodě žádné errory a pak prostě když kód jede a má něco vypsat do textboxu z jiné třídy tak z ničeho nic vyskočí a napíše NullReference­Exception was unhandled. Co s tím? jak to mám opravit?
Děkuji za každou pomoc.

 
Odpovědět 27.1.2015 14:12
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na NeonMaster
David Čápka:

Jak můžeš měnit TextBox z jiné třídy? Ten si přeci mění jen ta jedna třída, která reprezentuje formulář, ve kterém je vložený.

Nahoru Odpovědět 27.1.2015 14:17
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
NeonMaster
Člen
Avatar
Odpovídá na David Čápka
NeonMaster:

To nejde? já myslím text změnit.

 
Nahoru Odpovědět 27.1.2015 14:26
Avatar
Odpovídá na NeonMaster
Petr Čech (czubehead):

Tak sem dej nějaký kód, abychom věděli, co chceš dělat+ jakou používáš technologii. Nebo to prostě víc upřesni.

Nahoru Odpovědět 27.1.2015 14:38
Why so serious? -Joker
Avatar
Honza
Člen
Avatar
Honza:

Každopádně podle chyby: NullReference­Exception bych tipoval, že se pokoušíš přistupovat k objektu (buď k tomu textboxu nebo k té třídě) od kterého nemáš vytvořenou instanci.
Ale bez kusu kódu kde ti to nefunguje to je jen hádání naslepo.

Nahoru Odpovědět 27.1.2015 14:43
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
NeonMaster
Člen
Avatar
NeonMaster:

Mám Form1 a třídu Class1 a textBox2 jediné co chci aby se ten text v tom textboxu změnil ze třídy Class1.Např:

textBox2.Text = "Ahoj";

A mám tam vytvořené to abych to mohl používat
ve Formu mám

Class1 trida3 = new Class1(textBox2);

a v Class1 potom

private TextBox textBox2;

       public Class1(TextBox textBox2)
       {
           this.textBox2 = textBox2;
       }
 
Nahoru Odpovědět 27.1.2015 15:19
Avatar
Odpovídá na NeonMaster
Petr Čech (czubehead):

Tohle bude fungovat, zřejmě máš chybu někde jinde. Jen prosím nepoužívej Class1, textBox2, textBox1, Form1, je to neuvěřitelně nepřehledné. A ujisti se, že

Class1 trida3 = new Class1(textBox2);

děláš (Předpokládám, že v kostruktoru) po metodě InitializeCom­ponent();

Editováno 27.1.2015 15:42
Nahoru Odpovědět 27.1.2015 15:41
Why so serious? -Joker
Avatar
NeonMaster
Člen
Avatar
Odpovídá na Petr Čech (czubehead)
NeonMaster:

Ano.
Ale kde tedy může být chyba mám tam 0 errors 0 warnings a program se vždycky zasekne až u toho když chci změnit ten text v textBoxu ;(

 
Nahoru Odpovědět 27.1.2015 15:48
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na NeonMaster
David Čápka:

Předávat TextBox je nesmysl již jen z hlediska návrhu. Formulář slouží k tomu, aby se staral o nějaký objekt, ne aby se objekt naopak staral o jeho políčka a něco v nich měnil. Podívej se na zdejší seriál - http://www.itnetwork.cz/csharp/wpf

Nahoru Odpovědět 27.1.2015 15:52
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na NeonMaster
Petr Čech (czubehead):

Ale program se může zaseknout i za běhu, právě typickým příkladem je NullReference­Exception, těch možností, jak to rozbít a kompilátor to prostě nemá šanci ošetřit je spousty, namátkově třeba neexistující index v poli nebo neexistující soubor a tak. Z toho vyplývá, že zkompilování bez chyb nezaručuje správný běh bez vyjímek. Nehledě na to, že tu vyjímku můžeš vyhodit manuálně. Já osobně NullRefernece­Exception řeším tak, že si do Debug.WriteLine(); Zaznamenávám, kde objekt ještě není null, na zlomu se potom podívám na logiku předávání dat.
Jinak @David Čápka mám dojem, že to dělá ve WinFroms, jen to vygeneruje Form1.cs

Nahoru Odpovědět 27.1.2015 16:05
Why so serious? -Joker
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Petr Čech (czubehead)
David Čápka:

Tím hůře, když WF je prakticky mrtvé :)

Nahoru Odpovědět  ±0 27.1.2015 16:08
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na David Čápka
Jan Vargovský:

Ve WPF pak ale textbox nehandluješ v code-behind od Window.

 
Nahoru Odpovědět 27.1.2015 16:23
Avatar
Nahoru Odpovědět 27.1.2015 16:26
Why so serious? -Joker
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Petr Čech (czubehead)
Jan Vargovský:

Protože se většinou využívá MVVM pattern + commandy na handlení eventů.

Jestli si ale budeš něco hledat ke commandům, tak nejméně 50% všech implementací je špatně. Tak samo jako ukázka, že VM můžeš dělat z DependencyObjectu a další hovadiny.

Editováno 27.1.2015 16:38
 
Nahoru Odpovědět 27.1.2015 16:35
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Vargovský
David Čápka:

Pokud není nabindovaný, tak jo. A pokud je nabindovaný na VM, tak si to ten TextBox dělá sám, protože reaguje na nějakou událost. Nikdo ho z nějaké třídy nenastavuje :)

Nahoru Odpovědět 27.1.2015 16:38
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na David Čápka
Jan Vargovský:

To ano, ale pak je úplně jedno jestli ten člověk používá WPF nebo WF, protože ty technologie používá úplně stejně. Sice má ve WPF větší možnosti, ale pořád to bastlí jako ve WF. Potom tu každý doporučuje WPF před WF, i když pak pracují s tou technologií blbě.

 
Nahoru Odpovědět 27.1.2015 16:41
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Jan Vargovský
David Čápka:

A ja snad neco takoveho psal? :) Ze nema predavat TextBox a ze WF je staré jsem poslal jako 2 oddelene informace, které spolu nesouvisí.

Nahoru Odpovědět 27.1.2015 18:04
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
sorg
Člen
Avatar
sorg:

Když přidáš textbox na formulář, je implicitně private. Můžeš ho designeru nastavit na public a pak přistupovat k textbox.Text odkudkoliv, ale je to prasárna.
Ve třídě ve kterém máš textbox si udělej propertu, která ti umžní přistupovat k textboxu zvenčí.

public TextboxText
{
get {return this.textbox1­.Text;}
set {this.textbox1.Text = value}
}

Tohle ti umožní změnit string v textboxu odkudkoliv, kde vytvoříš instanci formuláře, kde ten textbox sedí.

A tohle funguje jak ve WinFormsech, tak WPF, protože to není o konkrétním framworku, ale spíše o věcech, které souvisejí s OOP jako takovým.

Editováno 30.1.2015 10:16
 
Nahoru Odpovědět 30.1.2015 10:13
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 18 zpráv z 18.