Inicializace formuláře – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Inicializace formuláře – .NET – Fórum – Programujte.comInicializace formuláře – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Mirek
~ Anonymní uživatel
53 příspěvků
19. 7. 2010   #1
-
0
-

Mohl byste mi někdo poradit?
Problém: Na Formu1 mám tlačítko, které mi jednak zinicializuje formulář(chci začít znovu) a jednak zobrazí druhý formulář. Z druhého formuláře si chci odemknout tlačítko na Formu1, ale nejde to.
Asi ta instance, co jsem si uložil do proměnné je jiná než ta u toho nově inicializovaného Formu1.
Abych dával smysl, otisknu sem ty kousky kodu:

mimochodem onen button2 je defaultne enabled = false

Na Formu1:
private void button2_Click(object sender, EventArgs e)
{

this.InitializeComponent(); // zaciname znovu
Form2 form2 = new Form2();
form2.InstanceRef = this; //ulozim si instanci formu1
Turnaj.Tur.Clear(); // vymazu udaje o turnaji

form2.ShowDialog();
}

Form2:

//na ukladani aktualni instance formu
private Form1 m_InstanceRef = null;
public Form1 InstanceRef
{
get
{
return m_InstanceRef;
}
set
{
m_InstanceRef = value;
}
}

private void button1_Click(object sender, EventArgs e)
{


//zpristupneni tlacitek
m_InstanceRef.button1.Enabled = true; // uz muzeme pridavat hrace

}





Děkuji moc

Nahlásit jako SPAM
IP: 78.45.89.–
Reklama
Reklama
liborb
~ Redaktor
+18
Guru
20. 7. 2010   #2
-
0
-

Z úkazky kódu není patrné, proč by to nemělo fungovat, ale jednu věc změnit můžeš. Máš form1, v něm zobrazuješ form2 jako modální, nebo-li se k formu1 po dobu zobrazení formu2 nedostaneš. Takže pokud chceš změnit nastavení formu1 dle čehosi ve formu2, tak to nemusíš dělat přes referenci, ale po skončení ShowDialog kouknout na nastavení ve formu2 (nějaké vlastní instanční proměnné) a podle toho změnit nastavení ve formu1.

Nahlásit jako SPAM
IP: 85.207.166.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
20. 7. 2010   #3
-
0
-

To liborb :
Mohl bys sem prosim hodit kratkou ukazku? Neni mi to uplne jasne, dekuji moc ;)

Nahlásit jako SPAM
IP: 89.176.22.–
liborb
~ Redaktor
+18
Guru
20. 7. 2010   #4
-
0
-

Když jsem ti chtěl napsat ukázku kódu, tak jsem asi přišel na tvůj problém :). Je to tento řádek

this.InitializeComponent(); // zaciname znovu

v button2_Click. Tím si vytvoříš nové instance všech ovládacích prvků. Pokud chceš jenom vymazat obsahy editačních polí, nastavit texty ve statickém textu, změnit stav tlačítek atd. tak to musíš udělat jinak (nejlépe vlastní funkce, která bude výchozí stav tvořit). Když to opravíš, tak ti bude fungovat i tvůj stávající postup. Jinak ten mnou navrhovaný způsob:



private void button2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.InstanceRef = this; //ulozim si instanci formu1
Turnaj.Tur.Clear(); // vymazu udaje o turnaji

form2.ShowDialog();

// s podminkou na hodnotu ve form2
if (form2.nějaká tvoje property)
{
button1.Enabled = true;
}
}

Nahlásit jako SPAM
IP: 85.207.166.–
Anonymní uživatel
~ Anonymní uživatel
0 příspěvků
20. 7. 2010   #5
-
0
-

To liborb :
Skvěle, díky. Napíšu si nějakou svoji reinicializační funkci a bude to. Pardon, že jsem nenapsal rovnou, že chyba je v tom:
this.InitializeComponent(); // zaciname znovu

To jsem věděl, pouze jsem netušil proč. Tak ještě jednou díky ;)

Nahlásit jako SPAM
IP: 62.245.78.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 73 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý