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
Fórum › .NET
Inicializace formuláře
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.
To liborb :
Mohl bys sem prosim hodit kratkou ukazku? Neni mi to uplne jasne, dekuji moc ;)
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;
}
}
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 ;)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Změna vlastností ovl.prvků hlavního formuláře z formuláře druhého. — založil avantasius
Mysql místo select, bych chtel dát do formuláre data z jiného vyplne… — založil minolot
Vytvoření formuláře z jiného formuláře? — založil oxidián
AVR inicializace — založil lolkas
Inicializace v tridach — založil .
Moderátoři diskuze