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

Data mezi formuláři – .NET – Fórum – Programujte.comData mezi formuláři – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
paja-u
~ Anonymní uživatel
3 příspěvky
15. 8. 2011   #1
-
0
-

Dobrý den,

v mainformu vytvořím při obsluze kliknutí na položku v menu nový form a v jeho konstruktoru mu předám potřebné hodnoty proměnných.

Jak je ale po zpracování dostanu zpátky?

Po kliku na OK nebo STORNO potřebuju provést dvě rozdílné události. Ty jsem si s delegátem nadefinoval v tom novém formu (public), ale nemohu ji napojit na obsluhu: Nevidím za názvem formu ??? nedefinovanou událost.

.

Form název_formu = new typ_formu( ... proměnné ... );
název_formu. ???  += obsloužení události; 

.

U jiných napojení událostí na obsluhu tam tu událost normálně vidím jenom u těch formů ne.

Druhou variantou by asi bylo předat data při obsluze tlačítka (příp. zavření formu) a pak si je zase vytáhnout  z EventsArgs, ale na to jsem zatím taky ještě nepřišel.

Nahlásit jako SPAM
IP: 109.69.208.–
Reklama
Reklama
FrewCen0
Newbie
15. 8. 2011   #2
-
0
-

Buď spracovanie vložíš do premennej, alebo metóda zmení niektoré z public premenných.

Skús premenna = instancia.metodasrovnakymnavratovymtypomakopremenna(). Ak sa jedná o void, tak ti to nepôjde, jedine že by ten void menil obsah public premennej v druhej instancii. Ja stále nevidím, kde máš problém. Ako by povedali na stacku - question is not clear.

...
//metoda na scitanie apb
Form2 frm2 = new Form2(a,b);
int ab = apb();
Console.Writeline(ab);

Alebo ty plánuješ spracovať data v konštruktore, a potom ich vycucnúť? 

Objasni to prosím viac.

Nahlásit jako SPAM
IP: 178.41.83.–
paja-u
~ Anonymní uživatel
3 příspěvky
15. 8. 2011   #3
-
0
-

#2 FrewCen
můj konstruktor pro nový form:

public Settings( bool w, bool b, int l)
        {  
            InitializeComponent();

            zde je přiřazení proměných w,b a l ovládacím prvkům formu

            this.Show();
        }

Takhle tam ty data dostanu a pak zpracuju metodami.

A pak je při OK potřebuju všechny zase vrátit zpět do mainformu a spustit nějakou metodu, při STORNO nebo zavření formu stačí jenom spustit metodu v mainformu.

Zkušel jsem i něco jiného - konstruktor:

public Settings(Form mainform)

{

. . . .

}

Ale i když mu takto předám odkaz na mainform tak stejně nemůžu volat metody mainformu uvnitř toho novýho formu i když jsou v mainformu public...

Nahlásit jako SPAM
IP: 109.69.208.–
paja-u
~ Anonymní uživatel
3 příspěvky
15. 8. 2011   #4
-
0
-

#3 paja-u
Anebo ještě jinak:

v mainformu mám vytvořený objekt jiné třídy ve které jsou ty položky (private) ke kterým přistupuji přes public vlastnosti(get/set).

V mainformu je vše ok.

Vytvořím nový form a v konstruktoru mu předám odkaz na ten objekt jiné třídy.

public newForm (otherclass name)

{

}

Ale pak mi to hlásí chybu na tom konstruktoru:

Inconsistent accessibility: parameter type 'name.Control' is less accessible than method 'name.Settings.Settings

(name.Control)'

Nahlásit jako SPAM
IP: 109.69.208.–
FrewCen0
Newbie
15. 8. 2011   #5
-
-1
-
Mimo téma

Vieš ako sa volá instancia MainFormu spúšťaná cez Application.Run()? Vôbec nechápem v čom je tvoj problém. takže pekne po poriadku.

1.) Vo MainForm sa spustí Settings

2.)Priradia sa dáta blah blah blah

3.) Po stistnutí tlačidla OK v Settings, sa dáta vrátia do MainForm, tak je? Ak áno, tak máš na to viac riešení.

Ty chceš, aby sa vrátili. Vieš aká Instancia bola vytvorená pri spustení programu? Bez toho sa nepohneš. Potom by už stačila len metóda na vybranie public premenných blah blah blah ktoru by si z instancie Settings Spustil. Ak sa instancia volá MainForm, tak by to šlo takto:

//mainform
class MainForm:Form
{
Settings set;
	...
	public void ZapniSettings(blah, blah, blah)
	{
		set = new Settings(blha,blah,blah);
	}
	public void ZoberDataZoSettings()
	{
		local_blah = set.blah;
	}

}
//settings
class Settings:Form
{
public string blah;
	...
	public Settings(blah, blah, blah)
	{
		//operacie
	}
	public void tlacidloOK_Click(object sender, EventArgs e)
	{
		MainForm.ZoberDataZoSettings();
	}

}
Nahlásit jako SPAM
IP: 178.41.83.–
Kyry+2
Newbie
16. 8. 2011   #6
-
-1
-
Mimo téma

Buď pomocí události, nebo to můžeš "zprasit" předáním instance formu1 do constructoru formu2 a přepsání potřebných věcí v formu1 na public, nebo internal.... Další možnost je statická třída pro nastavení, což ale nedoporučuji.

//Form2
public delegate void OnCancelHandler(string arg);
public event OnCancelHandler OnCancel;

//Kde das storno
OnCancel("Action has been cancelled");

//Form1
//Kde vytvaris form2
Form2Instance.OnCancel+= delegate(string arg){//(anonnymní metoda)
//Zpracování dat
};
Nahlásit jako SPAM
IP: 92.62.224.–
Vsadil jsem se, že budu mít na fóru nejlepší reputaci, pokud jsem ti pomohl(opravdu),
klikni na bezvýznamné plusko :-)
[b]Whether you think you can, or can't you are right ![/b]
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, 61 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ý