NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: přístupnost prvků formuláře z jiné knihovny

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
bestatomas
Člen
Avatar
bestatomas:21.12.2016 12:48

Ahoj, učím se programovat v C# a chtěl bych jestli byste mi mohl někdo poradit.
Mám formulář a na něm textbox, ve kterém bych chtěl vypisovat text. Tento text se vypíše po stisknutí tlačítka button. Toto lze jednoduše vytvořit ve funkci:

private void button1_Click(object sender, EventArgs e)
{
     textBoxLog.Text = "blabla";
}

pokud chci ale provést např. nějaký složitější úkol, jehož kód bude vytvořen v nějaké třídě
např.

namespace WindowsFormsApplication1
{
     class Scitani
          {
          public int a = 2;
          public int b = 3;
          public int Vypocet()
          {
                int vysledek = a + b;
                return vysledek;
          }
     }
}

zajímalo by mě jestli je možné přímo v třídě Scitaní přistupovat k formulářovým prvků něco ve stylu:

namespace WindowsFormsApplication1
{
     class Scitani
     {
          public int a = 2;
          public int b = 3;
          public void Vypocet()
          {
                int vysledek = a + b;
                textBoxLog.Text = vysledek.ToString();
          }
     }
}

ještě by mě zajímalo jestli tento postup je vůbec vhodný. Jestli není lepší provést výpočet ve třídě sčítání, která vrátí výsledek a pak se uvnitř funkce button1_Click provede zápis do textbox:

private void button1_Click(object sender, EventArgs e)
{
      Scitani soucet = new Scitani();
      int vysledek =  soucet.Vypocet();
      textBoxLog.Text = vysledek.ToString();
}
Editováno 21.12.2016 12:50
 
Odpovědět
21.12.2016 12:48
Avatar
Marian Benčat:21.12.2016 12:54

Prvky na formuláři není nic jiného než třída, resp. instance třídy. Lze je tedy poslat jako parametr do jakékoliv metody. Většinou to ale není moc dobrý nápad.

Jednak to narušuje logiku a míchá 2 spolu nesouvisející věci a za druhé je ten framework Single thread apartment, takže je nutný zaručit, že si ta knihovna vše bude dělat v tom 1 hlavním vlákně a nepokusí se ten prvek upravit v jiném vlákně.

Mnohem lepší je tedy druhá varianta, spočítat v knihovně a v code behindu přiřadit.

Nahoru Odpovědět
21.12.2016 12:54
Totalitní admini..
Avatar
Odpovídá na bestatomas
Michal Štěpánek:21.12.2016 12:55

Třída nemá o nějakém textboxu vůbec vědět. Když se to učíš, projdi si zdejší tutoriál na OOP, tam je to všechno pěkně popsáno. A pak se vykašli na Windows Forms a začni rovnou s WPF.

Nahoru Odpovědět
21.12.2016 12:55
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
bestatomas
Člen
Avatar
bestatomas:21.12.2016 12:56

díky moc :-)

 
Nahoru Odpovědět
21.12.2016 12:56
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 4 zpráv z 4.