IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
thebestgamesify:10.5.2014 21:36

Ahoj , moje meno je TheBestGamesfy a mam menši problem s progress barom a labelom. Nevim jak udelat to aby pocas progress baru se menil text v buttonu skušal sem aj label1.Text == "TEXT"; ale kdyz sem chtel aby se text zmenil 2krat nebo 3krat hned to preskocilo na posledny text prosim poradte
(PROGRAMUJI V JAZYCE C#)

Editováno 10.5.2014 21:36
 
Odpovědět
10.5.2014 21:36
Avatar
rawen
Člen
Avatar
Odpovídá na thebestgamesify
rawen:10.5.2014 21:47

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š.

Nahoru Odpovědět
10.5.2014 21:47
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
thebestgamesify:11.5.2014 10:59

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 :(.

 
Nahoru Odpovědět
11.5.2014 10:59
Avatar
Odpovídá na thebestgamesify
Luboš Běhounek Satik:11.5.2014 11:20

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.

Nahoru Odpovědět
11.5.2014 11:20
https://www.facebook.com/peasantsandcastles/
Avatar
thebestgamesify:11.5.2014 12:10

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"

 
Nahoru Odpovědět
11.5.2014 12:10
Avatar
coells
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
coells:11.5.2014 12:49

OMG, když někdo skočí z mostu, skočíš za ním?

Byl, nebyl jeden naprostý idiot a vymyslel public static metodu Application.Pro­cessMessages(). 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.

 
Nahoru Odpovědět
11.5.2014 12:49
Avatar
Odpovídá na thebestgamesify
Michal Štěpánek:11.5.2014 12:53

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...

Nahoru Odpovědět
11.5.2014 12:53
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na thebestgamesify
Michal Štěpánek:11.5.2014 13:05

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 :-)

Nahoru Odpovědět
11.5.2014 13:05
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
thebestgamesify:11.5.2014 13:41

Diky :)
Ale nemoh bys tu napsat ten kod do timeru???
Nebo je to ten kod co sem psal ja ?

 
Nahoru Odpovědět
11.5.2014 13:41
Avatar
Odpovídá na coells
Luboš Běhounek Satik:11.5.2014 14:00

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 :)

Nahoru Odpovědět
11.5.2014 14:00
https://www.facebook.com/peasantsandcastles/
Avatar
 
Nahoru Odpovědět
11.5.2014 14:07
Avatar
Odpovídá na thebestgamesify
Luboš Běhounek Satik:11.5.2014 14:17

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.

Nahoru Odpovědět
11.5.2014 14:17
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
thebestgamesify:11.5.2014 14:20

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

 
Nahoru Odpovědět
11.5.2014 14:20
Avatar
rawen
Člen
Avatar
Odpovídá na thebestgamesify
rawen:11.5.2014 14:21

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();
    }
}
Editováno 11.5.2014 14:23
Nahoru Odpovědět
11.5.2014 14:21
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Odpovídá na rawen
thebestgamesify:11.5.2014 14:25

jo chapu ale kdyz to chci aby to menilo text labelu

 
Nahoru Odpovědět
11.5.2014 14:25
Avatar
Odpovídá na thebestgamesify
Michal Štěpánek:11.5.2014 14:32

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)

Editováno 11.5.2014 14:33
Nahoru Odpovědět
11.5.2014 14:32
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na rawen
thebestgamesify:11.5.2014 14:35

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

 
Nahoru Odpovědět
11.5.2014 14:35
Avatar
rawen
Člen
Avatar
Odpovídá na thebestgamesify
rawen:11.5.2014 14:35

lol, docela by mě zajímalo proč programuješ něco takovéhoto, když ti unikají úplné základy. :)

Nahoru Odpovědět
11.5.2014 14:35
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
rawen
Člen
Avatar
Odpovídá na thebestgamesify
rawen:11.5.2014 14:38

Nemusíš klikat :D, tím kliknutím zapneš pohyb progressBaru, stačí jedno kliknutí. Něco takového si můžeš hodit za InitializeCom­ponent() 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 :D.

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);
}
Editováno 11.5.2014 14:39
Nahoru Odpovědět
11.5.2014 14:38
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
thebestgamesify:11.5.2014 14:47

:) ja sem na to tlačitko asi 5krat poklikal a čim viac sem klikal tak mi nabehoval progress bar když sem nekliknut nic nenabehovalo -_-

  • ten kod timer1.Tick += new EventHandler(ti­mer_Tick); vubec nefunguje
Editováno 11.5.2014 14:48
 
Nahoru Odpovědět
11.5.2014 14:47
Avatar
rawen
Člen
Avatar
Odpovídá na thebestgamesify
rawen:11.5.2014 14:54

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..

Editováno 11.5.2014 14:56
Nahoru Odpovědět
11.5.2014 14:54
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
thebestgamesify:11.5.2014 14:57

Ano mam

 
Nahoru Odpovědět
11.5.2014 14:57
Avatar
Odpovídá na thebestgamesify
Michal Štěpánek:11.5.2014 15:00

a jmenuje se timer1?

Nahoru Odpovědět
11.5.2014 15:00
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
rawen
Člen
Avatar
Odpovídá na thebestgamesify
rawen:11.5.2014 15:07

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. :)

Nahoru Odpovědět
11.5.2014 15:07
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na thebestgamesify
Petr Nymsa:11.5.2014 15:21

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

Nahoru Odpovědět
11.5.2014 15:21
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Tato diskuze byla označena moderátorem jako nekonstruktivní a myslíme si, že nemá pro veřejnost příliš vysokou hodnotu. Členy můžete samozřejmě stále oslovit soukromě a to formou zpráv nebo chatu.

Zobrazeno 25 zpráv z 25.