Používání nástroje z jiného formu   zodpovězená otázka

C#, WinForms

Zdravím,

začal jsem dělat v C# (VS 2010, .NET 4.0) a narazil jsem na problém. Potřebuji z formuláře newUser provést po stisknutí tlačítko kód, který znovunačte lbxUser (ListBox), který se nachází na mainFrm. Ve VB.NET (VS 2008, .NET<3.5) to šlo nějak takhle

mainFrm.lbxUser...

Jde mi jen o to jak se dostat k tomu ListBoxu na jiném formu, to znovunačtení vím jak udělat.

Přeji hezký den a děkuji za každou odpověď.

Edit: Teď jsem narazil na tento článek ( http://www.vbnet.cz/forum-tema--3929-ovl... ) ,ale jak zkouším tak zkouším nechce se ten ListBox zobrazi v IntelliSense.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ve Visual Basicu jsou standardně ovládací prvky Friend (internal), v C# Private. To je ten důvod proč se k nim nelze dostat přes instanci formuláře. Lze to změnit v návrhovém režimu pomocí vlastnosti Modifiers.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ano to jsem provedl, bohužel se pořád nemůžu dostat k tomu ListBoxu. Jak zkouším tak pořád nemůžu přijít jak se k němu dostanu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nastavte Modifiers na Public a musí to fungovat.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Také nic, možná to jen hledám blbě. Nevím kde se to skrývá, jestli jako ve VB.NET

 mainForm.lbxUzivatele 

nebo jinde :(.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jenom pro jistotu:

Je mainForm proměnná, ve které máte odkaz na instanci formuláře? Nejedná se náhodou o jméno třídy formuláře?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ano, je to třída formuláře, mainForm se spouští s Program.cs takto:

Application.Run(new mainForm());

, takže proměnnou nezískám a i když jsem to přepsal takto:

mainForm mainFrm = new MainForm();
mainFrm.show();

tak mi IntelliSence stejně nezobrazilo.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Na třídě tuto vlastnost samozřejmě nenajdete. Musela by být statická, což je v tomto případě nesmysl.

Odkaz na MainForm si předejte do newUser například takto:

// kod volany z MainFormu, napriklad po stisknuti tlacitka pro pridani uzivatele
using (var form = new NewUser())
{
  // predam odkaz na instanci hlavniho formulare
  form.Init(this);
}

Ve formulari NewUser si pak musite odkaz ulozit a nasledne s nim muzete pracovat:

// Promenna do ktere se ulozi odkaz na instanci hlavniho formulare
private MainForm mainForm;

public void Init(MainForm form)
{
  // ulozim si odkaz na hlavni formular
  mainForm = form;
  ShowDialog();
}

private void button1_Click(object sender, EventArgs e)
{
  // pristup k prvku v hlavnim formulari (musi byt public nebo internal)
  mainForm.lbxUser.Items.Clear();
}

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Seznam otevřených oken (instancí) je k dispozici v statickém Application.OpenForms, na konkrétní okno se lze dostat buď pomocí jeho názvu nebo indexu. Není nutné předávat instanci.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A keď budem mať viacero form2 a potrebu k ním pristúpiť z form3 otváraného tlačidlom na form2 ? Tam mi nepomôže vedieť, že je to form2, pretože ich bude viacero a mne treba odkaz na presne ten form2, z ktorého bol form3 otvorený.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji pane Mašku, funguje to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback