Diskuze: zmena textu pri nacitavani progress bar
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 25 zpráv z 25.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Záleží jak máš nastavené měnění Value na samotném ProgressBaru. Měl bys použít nějakou událost, kterou se ti mění Value na ProgressBaru. Příklad: Dejmetomu, že máš třeba nějaký Timer, kterým se ti mění Value na ProgressBaru, tak stačí udělat událost, která se třeba podívá na současnou Value ProgressBaru a podle toho se to rozhodne jaký napíše text toho Labelu co chceš.
Jo ale proste když nastavim VALUE progress baru napr 40,75 a aby sa ten text
zobrazoval v poradi tak mi to zacne delat neplechu napr progressbar se ani
nenacte nebo mi to zostane na tej 40tke a text se neprepne .
Předpokládám, že je to problém, který se vykytuje celkem často - nastavuješ to v hlavním vlákně uprostřed nějakého delšího výpočtu. Vyřeší to přidání řádky
Application.ProcessMessages();
za ten kód, který mění GUI - třeba za změnu textu na labelu.
Pokud to nepomůže, tak sem hoď celý kód.
tohle to je button : progressBar1.Value = 35;
label1.Text = "Jak se mas?";
progressBar1.Value = 45;
label1.Text = "SUPER ";
progressBar1.Value = 55;
label1.Text = "Tak to jn";
a tohle timer : progressBar1.Value = progressBar1.Value + 1;
ale proste ono to tie vety v tom kodu buttonu vsechny preskoci
a hned do da tu vetu "JN"
OMG, když někdo skočí z mostu, skočíš za ním?
Byl, nebyl jeden naprostý idiot a vymyslel public static metodu Application.ProcessMessages(). Pak skočil z mostu a další za ním skáčou také?
Pokud rozumíš tomu, jak tahle metoda funguje, tak také víš, že nabourává design event-driven aplikací a umí být pěkně nebezpečná jak z hlediska výkonu, tak chyb.
v první řadě používej tlačítko "code" a v druhé řadě, jestli to
máš takhle všechno dohromady, tak se nemůžeš divit, že ani nestihneš
zaregistrovat, že se ti tam něco mění, a že to skočí až na konec....
Zkusil bych použit nějaké podmínky...
a ty podmínky bych šoupnul do události toho timeru a ne do tlačítka,
protože value progressbaru ti mění timer a ne button
Diky
Ale nemoh bys tu napsat ten kod do timeru???
Nebo je to ten kod co sem psal ja ?
Ano, vím moc dobře, co dělá, a taky dávám přednost použít pro dlouhoběžící metody vlastní vlákna.
Ale pořád mi přijde pro začátečníka bezpečnější použít
Application.DoEvents();
než jim motat hlavu vlákny.
Jinak teď koukám, že problém má jinde a tohle by to nevyřešilo
Jen že
Application.DoEvents();
by tvůj problém nevyřešilo.
Do timeru si přidej podmínky, aby se ty hodnoty nastavily až když má progressbar tu hodnotu, jakou chceš (jestli jsem dobře pochopil, jak to myslíš).
Pokud podmínky používat neumíš, měl by sis projít zdejší tutoriály, případně ti třeba pomůže aspoň http://www.itnetwork.cz/…ni-if-switch .
Tvůj kód
label1.Text = "Jak se mas?";
progressBar1.Value = 45;
label1.Text = "SUPER ;)";
progressBar1.Value = 55;
label1.Text = "Tak to jn";
momentálně dělá to, že nastaví hodnotu labelu, pak změní hodnotu progressbaru, pak zase hned změní ten label, pak zase hned progressbar a pak zase ještě jednou změní label.
Myslim to tak že kdyz bude mat progress bar hodnotu 15 pak 20 atd že se u každej hodnoty zmeni text labelu ale ne bleskovo rychle pomali
V podstatě by se to dalo řešit v tomto duchu. Kdy se teda progressBar
zapne po stisknutí tlačítka a zastaví se až dosáhne svého kone. Text, co
si chtěl, se v tomhle případě vypisuje do textBox1.
private void button1_Click(object sender, EventArgs e) // tlačítko co zapne progressBar
{
timer1.Enabled = true;
timer1.Start(); // zapnutí
timer1.Interval = 100; // interval po jaké hodnotě se má posouvat
progressBar1.Maximum = 100; // maximum // toho stavu dosáhne s tímto intervalem za 10s
timer1.Tick += new EventHandler(timer1_Tick);
}
void timer1_Tick(object sender, EventArgs e) //tohle reaguje na změnu času..
{
if (progressBar1.Value != progressBar1.Maximum) // pokud by dojel na konec, tak se už nic zde měni nebude a timer se zastaví
{
progressBar1.Value++;
// nějaké ty podmínka co se má vypisovat
if (progressBar1.Value == 35)
textBox1.Text = "Jak se mas?";
if (progressBar1.Value == 45)
textBox1.Text = "SUPER ;)";
if (progressBar1.Value == 55)
textBox1.Text = "Tak to jn";
}
else
{
timer1.Stop();
}
}
jo chapu ale kdyz to chci aby to menilo text labelu
A co myslíš, že ten předchozí kód od rawen dělá???
Místo TextBox1.Text dej Label1.Text (místo Label1 samozřejmě napíšeš
jméno toho tvého labelu)
JO jenze ono to reaguje iba na klikani na button ale ne same od sebe !
Musim klikat aby tam neco vypsalo :/
Ale ja chci aby to samo išlo
lol, docela by mě zajímalo proč programuješ něco takovéhoto, když ti
unikají úplné základy.
Nemusíš klikat , tím
kliknutím zapneš pohyb progressBaru, stačí jedno kliknutí. Něco takového
si můžeš hodit za InitializeComponent() a zapne se ti to hned po zapnutí.
Já jsem jen uvedl příklad na kliknutí na tlačítko, protože nevím jak si
chceš zapnout pohyb progressBaru
.
public Form1()
{
InitializeComponent();
timer1.Enabled = true;
timer1.Start(); // zapnutí
timer1.Interval = 100; // interval po jaké hodnotě se má posouvat
progressBar1.Maximum = 100; // maximum // toho stavu dosáhne s tímto intervalem za 10s
timer1.Tick += new EventHandler(timer1_Tick);
}
ja sem na to tlačitko asi
5krat poklikal a čim viac sem klikal tak mi nabehoval progress bar když sem
nekliknut nic nenabehovalo -_-
Jako mě to funguje, když to zapneš tak zkus možná počkat než se to rozjede. Nebo si zkus zmenšit hodnotu timer1.Interval = 100;
A máš tam vůbec kontrolku Timer v návrhu? Pod samotným návrhem by měla být..
Asi sem zkus hodit kód co teď máš, mě tohle jede tak jak to chceš mít,
takže tam musíš mít nějakou botu naprogramovanou někde.
Vlákno zvírám jako nekontruktivní. Tazatel absolutně neví o čem je řeč.
Pro tazatele:
Otevři s zdejší tutoriály. Vykašli se na Windows Formy a pochop pořádně
základy, postupně naabluj OOP a sem tam si zkoušej už hrát s Windows
Forms.
Z tvých odpovědí je vidět, že nerozumíš co se ti v kódu děje a vlastně
nerozumíš zřejmě ani podmínkám.
LOCK
Zobrazeno 25 zpráv z 25.