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.
Zobrazeno 18 zpráv z 18.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
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.
