Diskuze: proč nejde měnit text v textboxu z jiné třídy
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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ý.
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.
Každopádně podle chyby: NullReferenceException 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.
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;
}
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ě InitializeComponent();
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
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
Ale program se může zaseknout i za běhu, právě typickým příkladem je
NullReferenceException, 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ě
NullReferneceException ř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 Hartinger mám dojem, že to dělá ve WinFroms, jen to vygeneruje
Form1.cs
Ve WPF pak ale textbox nehandluješ v code-behind od Window.
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.
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
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ě.
A ja snad neco takoveho psal? Ze nema predavat TextBox a ze WF je staré jsem poslal jako 2 oddelene
informace, které spolu nesouvisí.
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.
Zobrazeno 18 zpráv z 18.