Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
Eldest
Tvůrce
Avatar
Eldest:11.12.2012 19:40

Ahoj/Dobrý večer, snažil jsem se googlovat, ale nikde jsem nenašel plnohodnotnou odpověď nebo jsem hledal špatně. Mám program (okenní aplikace v C#), kde mám ve Form1 label1. Z Form1 spustím mnou vytvořený Form2. Chtěl bych obsah labelu1, který je ve Form1 z Form2 změnit, ale nevím, jak k tomu „prvku“ nebo i ostatním „přistupovat“.

 
Odpovědět
11.12.2012 19:40
Avatar
Luboš Běhounek Satik:11.12.2012 19:45

Musis si nejak predat do Formu2 odkaz na Form1.

Treba takhle:

u formu1 po vytvoreni druhyho formu zavolas

Form2.SetForm(this);

a u formu 2 si udelas promennou

Form form1=null;

a funkci

public void SetForm(Form form)
{
  this.form1 = form;
}
Nahoru Odpovědět
11.12.2012 19:45
https://www.facebook.com/peasantsandcastles/
Avatar
Eldest
Tvůrce
Avatar
Eldest:11.12.2012 19:54

Aha, a např. upravení textu z labelu1 z Form1 by bylo jak?

 
Nahoru Odpovědět
11.12.2012 19:54
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Eldest
David Jančík:11.12.2012 19:56

Buď to můžeš takto: http://www.itnetwork.cz/…053a0ff2dd44
Jak již vlastně uvedl Satik. A nebo použít Invoke

control.Invoke(new MethodInvoker(() =>
{
    control.Text = "asdf";
}));

Můžeš si dát invoke třeba na celý form a měnit co potřebuješ z jiných oken nebo vláken. Pokud dáš invoke do nějaké metody přímo v tom formu, která se volá i třeba přímo z něj použij podmínku if (control.InvokeRequired).

Nahoru Odpovědět
11.12.2012 19:56
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Eldest
Tvůrce
Avatar
Eldest:12.12.2012 16:25

V případě práce např. zase s labelem z třídy (label je umístěn ve Form1), bych to udělal jak? Díky

 
Nahoru Odpovědět
12.12.2012 16:25
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na Eldest
David Jančík:12.12.2012 16:41

Třeba takto:

Program.cs

public static Form1 FormInstance = new Form1();

...

Application.Run(FormInstance);

Bez statiky:

Application.OpenForms.OfType<Form1>().First();//za předpokladu, že těch oken není více

Kdekoliv

Program.FormInstance.Invoke(new MethodInvoker(() =>
{
    Program.FormInstance.label1.Text = "můj text";
    Program.FormInstance.Text = "popisek formu";
    ....
}));
Nahoru Odpovědět
12.12.2012 16:41
Zapomeň, že je to nemožné a udělej to ;)
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 6 zpráv z 6.