Avatar
Eldest
Redaktor
Avatar
Eldest:

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):

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
:)
Avatar
Eldest
Redaktor
Avatar
Eldest:

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

 
Nahoru Odpovědět 11.12.2012 19:54
Avatar
Odpovídá na Eldest
David Jančík [sczdavos]:

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
Čím více času dostaneš, tím méně ho máš.
Avatar
Eldest
Redaktor
Avatar
Eldest:

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
Odpovídá na Eldest
David Jančík [sczdavos]:

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
Čím více času dostaneš, tím méně ho máš.
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.