Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

Diskuze: Jak docílit okamžité změny textu Labelu.

Aktivity (4)
Avatar
Pavel Vorel
Člen
Avatar
Pavel Vorel:20. února 10:06

Zdravím a prosím o radu. Ve VB studio 2010 expres se jako začátečník pokouším psát program, kde v proceduře Button1_Click mám napsané nějaké příkazy a pak chci oznámit uživateli aby čekal. Použil jsem Label.

-
-
-
Label1.text = "Čekej."
návrhjl()
návrhdlL()
návrhtl()
-
-
-
End Sub

Změna textu v Labelu se ale nezobrazí a program pokračuje dokud se někde dál neobjeví příkaz MsgBox() nebo neskončí procedura tlačítka. Label stejně jako TextBox reagují na nějaké události ( Change a pod.). Ale já nevím jak některou z nich vyvolat.
Jaký příkaz na to použít, aby se mi text zobrazil ihned. Děkuji

 
Odpovědět 20. února 10:06
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Pavel Vorel
vajkuba1234:20. února 12:19

Mimo tema - proc jsi zacal s Visual Basicem?

Nahoru Odpovědět  ±0 20. února 12:19
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Pavel Vorel
Člen
Avatar
Odpovídá na vajkuba1234
Pavel Vorel:20. února 14:52

Připadalo mi to nejbližší. Před 50-ti lety jsem udělal pár prográmků v klasickém Basicu (ještě na ZX Spektru) a od té doby jsem na počítač nesáhl. Mimo obsluhy nějakého CADovského programu v práci.

 
Nahoru Odpovědět  +2 20. února 14:52
Avatar
Odpovídá na Pavel Vorel
Michal Štěpánek:20. února 15:18

Změna se neprojeví, protože vlákno je "zaneprázdněno" zpracováním těch příkazů. Mrkni se na komponentu BackgroundWorker, ta ti pomůže.
P.S.
VS 2010 je opravdu hooodně staré a spousta věcí se dnes dělá tak, jak to VS2010 neumí, páč v té době to tak nefungovalo. Stáhni si VS2017 Community, ten je taky zdarma a "novoty" umí...

Nahoru Odpovědět  +3 20. února 15:18
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
HONZ4
Člen
Avatar
HONZ4:20. února 17:39
Label1.text = "Čekej."
Label1.Refresh
 
Nahoru Odpovědět 20. února 17:39
Avatar
Pavel Vorel
Člen
Avatar
Odpovídá na HONZ4
Pavel Vorel:20. února 19:41

label1.refresh mi nefunguje.
Celý program jsem předělal, takže jsem label z tlačítka vypustil, ale problém zůstává. Celý program obsahuje několik procedur tlačítek, jednu proceduru mouse_klick a asi 15dalších procedur. Tlačítkem se program spustí, něco udělá a p hlášce pracuj čeká na to co se udělá. zda se zmáčkne nějaké tlačítko nebo klikne myší. Kliknutí spustí nějakou proceduru a po doběhnutí této procedury je na jejím konci opět Label s hláškou "pokračuj" aby obsluha věděla že má něco udělat. Ale tento label se nezobrazí a počítač čeká na to co udělá obsluha - jestli zmačkne tlačítko nebo klikne myší. Obsluha ale neví že má dělat. Jistě to mohu obejít použitím msgBoxu nebo inputem ale chtěl jsem se vyhnout rušení těchto zpráv.

 
Nahoru Odpovědět 20. února 19:41
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
HONZ4
Člen
Avatar
Odpovídá na Pavel Vorel
HONZ4:20. února 22:16

Refresh by měl fungovat (Případně i Application.Do­Events(), ale to používej opatrně!). Jak psal Michal Štěpánek, podívej se na i BackgroundWorker.
Tvé vysvětlení je dost zamotané. Určitě by bylo lepší sem dát kód.. Ale musíš počítat s tím, že ve VB už moc lidí nedělá (většinou C#), takže možná budeš muset čekat delší dobu na odpověď.

Editováno 20. února 22:17
 
Nahoru Odpovědět 20. února 22:16
Avatar
Odpovídá na Pavel Vorel
Michal Štěpánek:21. února 7:02

BackgroundWorker ti "přesune" ty akce do jiného vlákna, než ve kterém běží hlavní okno aplikace a tím pádem bude aplikace umět reagovat na vzniklé události.
Z tohoto videa https://channel9.msdn.com/…plikacich-CZ jsem pochopil nasazení BackgroundWorkeru i já (a to je co říct).
Taky jsem začínal s VisualBasicem, páč mi přišel srozumitelnější do začátku.
Postupně jsem ale zjišťoval, že VB.NET se věnuje málo lidí (oproti C#.NET) a tak jsem postupně přešel k C#. Zpočátku jsem byl vyvalenej, ale ten přechod není tak strašný, jak to na první pohled vypadalo. Obrovská komunita vývojářů a velké množství materiálů a návodů v C# (oproti VB), ti mohou výrazně usnadnit "vývoj"...

Nahoru Odpovědět  +1 21. února 7:02
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Pavel Vorel
Člen
Avatar
Odpovídá na Michal Štěpánek
Pavel Vorel:21. února 10:10

Díky, už to funguje . To video je opravdu dobré.
Ještě mě naučte jak mám dotaz uzavřít aby bylo vidět že je vyřešen.

 
Nahoru Odpovědět 21. února 10:10
Avatar

Člen
Avatar
Odpovídá na vajkuba1234
:21. února 10:28

A proč by Vajkubal1234-le ve VB nezačal? Výstup v .NET po překladu je snad něco méně hodnotnějšího než z C#? Vychází ten jazyk snad z jiné vrstvy prostředí .NET? Prasit se snad dá v jakémkoliv jazyce...stejně tak jako psát elegantně. Nebo ne?
Nesporně efektivnější je samozřejmě začínat v C#. Ale v prostředí .NET je pro začátek a začátečníka VB třeba přístupnější (i když mě osobně to připadá úplně jedno - ale nebudu proto dloubat do někoho - snad jen do toho, kdo dloubá do druhých).
Po získání některých základních schopností, zkušeností a sebedůvěry, po pochopení základních zákonitostí může Pavel Vorel vždycky začít psát to samé v C# stejně tak dobře jako ve VB, anebo se na to prostě pak vybodnout. To je na něm.

Prozatím je pro něj důležité aby pochopit základní teorie win aplikace. Mezi stěžejní patří ta informace, že každá aplikace běží v 1 hlavním vlákně tzv. UI Threadu, které pokud se zablokuje jakoukoliv časově náročnější činností, nedovoluje bez dalšího, zpracování všech následujících příkazů (např. nejčastěji se projevující obnovu stavu ovl. prvků formuláře - zjednodušeně řečeno).
Proto se využívají různé techniky (a je jich skutečně hodně), kdy se časově náročná "práce" přesouvá třeba do vlastního vlákna (tzn. dojde k paralerizaci úlohy) a v hlavním UI vlákně se čeká ve smyčce anebo jiným způsobem (asynchroním voláním, TPL apod.) na její dokončení jen.
Výhoda jednoho tohoto zpsůobu spočívá v tom, že hlavní UI vlákno má pak spostu času na starání se o rozhraní pro uživatele (okno).
S tímto tématem se pak velice často skloňuje problematika "thread safe", což není nic jiného než, že vše musí být synchronizováno a řízeno tak, aby to do sebe zapadlo. Pro takové řízení pak slouží spousta speciálních povelů (objektů a knihoven), které zjišťují stavy a existence objektů ve vláknech, doběhnutí paralerních úloh apod.

Ale protože programujete, můžete i krásně fungovat v rámci jednoho UI vlákna, a tu náročnou úlohu třeba nějakým vhodným způsobem rozdělit a naporcovat na menší kousky... které budete zpracovávat v cyklu, který pak dovolí aplikaci se vracet na pozadí k i režijním činnostem... fantazii se meze nekladou.

 
Nahoru Odpovědět 21. února 10:28
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na
vajkuba1234:21. února 11:33

Tvrdil jsem snad neco podobneho na co ptas? Ja se budu ptat na veci, ktere zajimaji me, takze tvuj afektovany prispevek, ktery je tak dlouhy, ze se mi ani nechce cist, ignoruji. :D

Nahoru Odpovědět  +1 21. února 11:33
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
Odpovídá na Pavel Vorel
Michal Štěpánek:21. února 11:44

U příspěvků je pro autora vlákna viditelná taková "fajfka", na kterou když klikneš, označí se vlákno jako dokončené a odpověď bude označena jako řešení...

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +2 21. února 11:44
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.