IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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: přístupnost prvků formuláře z jiné knihovny

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.