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

Pomoc s WindowsApplicationForm – .NET – Fórum – Programujte.comPomoc s WindowsApplicationForm – .NET – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
pcb0
Duch
23. 1. 2010   #1
-
0
-

prosim o radu jak změnit label.Text z jiné třidy.

mám form Hlavni.cs kde mam vložene nějake labely. po inicializaci tohoto formu si vytvořim a spustim vlakno ktere mi zavola metodu CteniUdaju() ze třidy Ovladani.cs

z teto metody CteniUdaju() nemam přistup k labelu z Hlavni.cs proto sem chtěl provest ve třidě Ovladani.cs

Hlavni hlavni= new Hlavni(); 

ovšem po tomhle když mou aplikaci pustim objevi se chyba přetečeni zasobniku při vytvařeni některych labelu.

jak se dostanu tedy k mym labelum z formu z jine třidy?

Nahlásit jako SPAM
IP: 62.209.230.–
Reklama
Reklama
dannyk0
Věrný člen
23. 1. 2010   #2
-
0
-

Nejjednodussi mas mit neco takoveho:



v tride Ovladani

public Ovladani(Hlavni form)
{
form.label = text;
}

v tride Hlavni

{
Ovladani o = new Ovladani(this);
o.necoDelej();
}

Proste si vlozis odkaz na tvuj vytvoreny form te ovladaci tride a pak uz nemas problem to ovladat.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
pcb0
Duch
23. 1. 2010   #3
-
0
-

tohle funguje, ja potřebuju spustit metodu CteniUdaju() v novem vlakně. nedaři se mi do vlakna dostat argumetn this a asi ještě budu potřebovat nějakou upravu abych mohl měnit labely z jineho vlakna než ve kterem byly vytvořeny.



public partial class Hlavni : Form
{
public Hlavni()
{
InitializeComponent();
Ovladani Ovladani = new Ovladani(this);

Thread t = new Thread( Ovladani.CteniUdaju);
t.Start();
}

public class Ovladani
{
public Ovladani(Hlavni form)
{
}
public void CteniUdaju(Hlavni hlavni)
{
hlavni.labelTlak.text = tlak;
}
}

Nahlásit jako SPAM
IP: 62.209.230.–
dannyk0
Věrný člen
23. 1. 2010   #4
-
0
-

Na spusteni vlakna s parametrem se pouziva ParametrizedThreadStart. Nastesti c# je tak chytry, ze ho pouzije automaticky, kdyz najde parametr v cilove metode, takze staci ten parametr predat do metody Start(this).
Pokud by to neslo (myval jsem s tim problemy), tak staci ten odkaz predat do konstruktoru a v kontruktoru si ho ulozit do verejne promenne.

Pro meneni udaju z jineho vlakna pouzivam invokovani



Invoke((MethodInvoker)(delegate()
{
statusText.Text = "...";
}));

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
pcb0
Duch
23. 1. 2010   #5
-
0
-



Thread t = new Thread(Ovladani.CteniUdaju);
t.Start(this);

Error 1 The best overloaded method match for 'System.Threading.Thread.Thread(System.Threading.ThreadStart)' has some invalid arguments
Error 2 Argument '1': cannot convert from 'method group' to 'System.Threading.ThreadStart'


dale pokud si inicializuju třidu ovladani s odkazem this musim to udělat v public Hlavni ()


public Hlavni()
{
InitializeComponent();
Ovladani Ovladani = new Ovladani(this);
}


potom se nedostanu do třidy Ovladani napřiklad z metody private void konecToolStripMenuItem_Click(object sender, EventArgs e)

Nahlásit jako SPAM
IP: 62.209.230.–
dannyk0
Věrný člen
24. 1. 2010   #6
-
0
-

Tak si promennou ovladani dej jako globalni ne?



class Hlavni
{
public Ovladani ovladani = null;

public Hlavni()
{
...
ovladani = new Ovladani(this);
...
}

}

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
pcb0
Duch
24. 1. 2010   #7
-
0
-

dannyk: vše už funguje, ještě bojuju s jednou věci.

z Hlavniho formu zavolam metodu ze třidy Ovladani kde si nastavim proměnou port ve třidě Komunikace.
pak z hlavniho formu spustim v novem vlaknu metodu ze třidy Ovladani kde pracuji se třidou Komunikace. vše funguje.

po stisknuti tlačitka ve formu si spustim dalši vlakno ve kterem volam metodu ze třidy Mereni. v teto třidě si inicializuju třidu Ovladani i třidu Komunikace. Ovšem když chci z měření přistupovat k proměné port je null.

co mam kde poslat při inicializaci? z formu posilam odkaz do třidy Mereni a ve třidě měřeni inicializuji třidu komunikace takto:
Komunikace komunikace = new Komunikace();

dale bych chtěl poradit jak pracovat s načitanim a ukladanim souboru.
v programu si generuju nějake xml do kterych ukladam data. Openfiledialog a Savefiledialog už mam, při ukladani asi obsah xml uložim přes savefiledialog, ale při otevřeni? do čeho mam obsah souboru načist?

Nahlásit jako SPAM
IP: 62.209.230.–
dannyk0
Věrný člen
24. 1. 2010   #8
-
0
-

V metode mereni musis pouzit odkazy na jiz vytvorene instance. Sam pises, ze je znovu vytvoris a pak mas port null. Musis si je nekde globalne ulozit a pak je pouzit.

Na ukladani a nacitani souboru je na internetu tuna prikladu se zdrojovyma kodama, staci pohledat. Ja na xml pouzivam bud XmlDocument nebo XmlTextWriter/XmlTextReader.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
pcb0
Duch
25. 1. 2010   #9
-
0
-

dannyk: mužu poprosit o přiklad? mam to takto:



public partial class Hlavni : Form
{
Komunikace Komunikace = new Komunikace();

public Hlavni()
{
InitializeComponent();
mereni = new Mereni(this);
}
}

public class Mereni
{
Komunikace komunikace = new Komunikace();

Hlavni hlavni;

public Mereni(Hlavni p_Hlavni)
{
hlavni = p_Hlavni;
}
}


s těma souborama sem to myslel tak, když si to xml vytvařim tak se mi při ukončeni XmlCloseWrite.close() uloži xml fyzicky na disku. chtěl bych at se mi to uloži do nějake "proměne" a pak až tim SaveFileDialogem to uložit fyzicky na disk. at u toho exe souboru s programem nemam ty xml vidět. je to možne?

Nahlásit jako SPAM
IP: 62.209.230.–
dannyk0
Věrný člen
25. 1. 2010   #10
-
0
-

Zrus ve tride mereni inicializaci te Komunikace() a predej ji z hlavni stejne jako predavas to Hlavni()



Mereni m = new Mereni(this, komunikace);

Proste ji nevytvarej 2x.

Pro ty Xml pouzij XmlDocument tridu. Pomoci ni muzes mit cely dokument v pameti a pak az v pripade potreby ho ulozit tim dialogem.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
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, 37 hostů

Podobná vlákna

Pomoc — založil Zugi

Pomoc DU — založil Anonymní uživatel

Pomoc — založil t

 

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