NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Karel Ohář
Člen
Avatar
Karel Ohář:13.12.2016 12:34

Zdravím, nemůžu pořád přijít na to jak změnit barvu progressbaru ze zelené na nějakou jinou. poraďte prosím. díky ;*

 
Odpovědět
13.12.2016 12:34
Avatar
Ilidanek33
Člen
Avatar
Ilidanek33:13.12.2016 13:13

Ahoj, řekl bych, že buď si budeš muset vytvořit vlastní komponentu a nebo zkus třeba toto http://stackoverflow.com/…visual-basic

 
Nahoru Odpovědět
13.12.2016 13:13
Avatar
Nahoru Odpovědět
13.12.2016 13:13
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
HONZ4
Člen
Avatar
Odpovídá na Karel Ohář
HONZ4:13.12.2016 19:32

přidej si tuto třídu k projektu:

using System.Windows.Forms;
using System.Drawing;

namespace NazevProjektu
{
    class NiceProgressBar : ProgressBar
    {
        const int space = 2;
        public NiceProgressBar()
        {
            this.SetStyle(ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            Rectangle rect = new Rectangle(0, 0, Width, Height);
            double scaler = (((double)Value - (double)Minimum) / ((double)Maximum - (double)Minimum));

            if (ProgressBarRenderer.IsSupported) ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rect);

            rect.Width = (int)(((rect.Width - space * 2) * scaler));
            rect.Height -= space * 2;

            if (rect.Width > 0)
                e.Graphics.FillRectangle(new SolidBrush(ForeColor), space, space, rect.Width, rect.Height);

            int x = rect.Width + space;
            rect.Width = Width - x - space;
            e.Graphics.FillRectangle(new SolidBrush(BackColor), x, space, rect.Width, rect.Height);
        }
    }
}

Po provedení kompilace projektu, se ti tento nový progressbar zobrazí i v Toolboxu, takže ho můžeš i ručně plácnout na formulář.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
13.12.2016 19:32
Avatar
Patrik Valkovič:13.12.2016 19:57

Nebo nepoužívej WinForms, jsou už mrtvé, nechápu proč se v tom chce pořád někdo učit....

Nahoru Odpovědět
13.12.2016 19:57
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
HONZ4
Člen
Avatar
Odpovídá na Patrik Valkovič
HONZ4:13.12.2016 20:24

Já taky dělám WF. A to hlavně ze třech důvodů:

  1. rychlost - většinou dělám graficky jednoduché desktopové aplikace
  2. WF se člověk prakticky učit nemusí, jde to samo
  3. přesto, že jsem se chtěl naučit WPF, zatím jsem nenarazil na dobrý a poutavý tutoriál
 
Nahoru Odpovědět
13.12.2016 20:24
Avatar
Odpovídá na HONZ4
Patrik Valkovič:13.12.2016 20:34

1 - Není pravda, WPF používá hardwarově akcelerované vykreslování, takže výkon je ve většině případů lepší.
2 - WPF se taky učí samo. Kdo někdy dělal v HTML, tak je to velmi podobné. Ve WF nemáš na výběr nic jiného, než si to naklikat v grafickém editoru. Na první pohled jednodušší, ale málokdy to ve výsledků dělá co potřebuješ.
3 - To je spíše výmluva. Tutoriálů na WPF je všude dost a když nestačí tutoriály, ta není nic jednoduššího než si koupit/stáhnout knihu.

Nahoru Odpovědět
13.12.2016 20:34
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
HONZ4
Člen
Avatar
HONZ4:13.12.2016 20:35

omlouvám se, udělal jsem tam chybu:

using System.Windows.Forms;
using System.Drawing;

namespace NazevProjektu
{
    class NiceProgressBar : ProgressBar
    {
        const int space = 2;
        public NiceProgressBar()
        {
            this.SetStyle(ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer, true);
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            Rectangle rect = new Rectangle(0, 0, Width, Height);
            double scaler = (((double)Value - (double)Minimum) / ((double)Maximum - (double)Minimum));

            if (ProgressBarRenderer.IsSupported) ProgressBarRenderer.DrawHorizontalBar(e.Graphics, rect);
            int dspace = space * 2;
            if (Height > dspace && Width > dspace)
            {
                rect.Width = (int)(((rect.Width - dspace) * scaler));
                rect.Height -= dspace;

                if (rect.Width > 0)
                    e.Graphics.FillRectangle(new SolidBrush(ForeColor), space, space, rect.Width, rect.Height);

                int x = rect.Width + space;
                rect.Width = Width - x - space;
                e.Graphics.FillRectangle(new SolidBrush(BackColor), x, space, rect.Width, rect.Height);
            }
        }
    }
}
 
Nahoru Odpovědět
13.12.2016 20:35
Avatar
Odpovídá na Patrik Valkovič
Michael Škrášek:13.12.2016 20:45

WPF je sice "rychlejší", ale WF má mnohem menší nároky jak ve Windows tak ve VS ... na starším notebooku jsem WPF prakticky nemohl dělat, protože se mi lagovalo VS. Navíc se mi nestalo, že by se mi sekla normální WF aplikace ... i když to vypadá líp a plynule to vykresluje ... občas to prostě nepotřebuješ a tam můžeš využít WF.

Nahoru Odpovědět
13.12.2016 20:45
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
Luboš Běhounek Satik:13.12.2016 21:02
  • má WF výhodu lepší multiplatformnosti - v Mono WF rozjedeš, WPF do Linuxu nedostaneš.

Osobně taky všechny drobný C# aplikace, co nejsou určený někam veřejnějc píšu v WF, protože je to jednosušší.

Nahoru Odpovědět
13.12.2016 21:02
https://www.facebook.com/peasantsandcastles/
Avatar
HONZ4
Člen
Avatar
HONZ4:13.12.2016 21:07
  1. souhlasím, ale pokud jsou na formu dva buttony a textbox, tak efekt bude nijaký (možná opačný)
  2. možná pokud jsi dělal html..
  3. neříkám, že nejsou. Spíš mě žádný nesedl.

k 2. bodu
Příklad:
naposled jsem si zkoušel použití ComboBoxu .. jen kolik desítek řádků bylo potřeba napsat, aby se mě změnila barva pozadí. Dopadlo to tak, že jsem to nevydržel a pokorně vrátil se zase zpět k WF :)

k bodu 3:
Tutoriál k WPF, aby mi seděl, bych si představoval tak, že bude předpokládat znalost WF, v podstatě by mohl přepisovat WF do WPF. Nejprve se snažit dosáhnout funkčnosti a vzhledu WF a postupem aplikaci vylepšovat a přecházet do čistého WPF.

Editováno 13.12.2016 21:09
 
Nahoru Odpovědět
13.12.2016 21:07
Avatar
HONZ4
Člen
Avatar
HONZ4:13.12.2016 21:18

A ještě jedna věc, sice trochu mimo původní záměr vlákna, ale když už jsme u toho:

Jak testujete chování prvků na formuláři na monitorech s různým typem rozlišení a poměru stran, pokud nemáte různé monitory po ruce? Nebo to máte takovou představivost?

 
Nahoru Odpovědět
13.12.2016 21:18
Avatar
Odpovídá na HONZ4
Michal Štěpánek:13.12.2016 22:54

Jak testujete chování prvků na formuláři na monitorech s různým typem rozlišení a poměru stran, pokud nemáte různé monitory po ruce? Nebo to máte takovou představivost?

Tady je právě výhoda WPF - relativní pozicování a rozměry prvků se daleko jednodušeji (oproti WF) přizpůsobí různým rozlišením monitoru...

Nahoru Odpovědět
13.12.2016 22:54
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
HONZ4
Člen
Avatar
Odpovídá na Michal Štěpánek
HONZ4:13.12.2016 23:05

to je právě jediný důvod proč jsem si chtěl WPF zkusit. Ale nevím jak si vyzkoušet jak bude formulář vypadat třeba na monitoru s nějakým vyšším rozlišením a jiným poměrem stran než mám já. Pokud wpf neovládám, tak si nejsem moc jistý, jak se to bude chovat.

 
Nahoru Odpovědět
13.12.2016 23:05
Avatar
Odpovídá na HONZ4
Patrik Valkovič:13.12.2016 23:54

Na vyšším rozlišení se to bude chovat stejně, jako když roztáhneš okno. Pro vyšší rozlišení jde ve většině adaptérů změnit rozlišení i nad skutečné rozlišení obrazovky (musí to podporovat driver). Teoreticky by ti Visual Studio mělo ukázat výsledek, pokud zvětšíš rozlišení. Jinak WPF je "pixel independent" - neřídí se (na rozdíl od třeba CSS) pixelama ale svýma virtuálníma jednotkama. To by mělo ve výsledku mít determiničtější chování.

Nahoru Odpovědět
13.12.2016 23:54
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na HONZ4
Michal Štěpánek:14.12.2016 6:41

Dlouho jsem wpf bojkotoval, resp. jsem se bál začít, ale je tu celkem pěkný tutoriál pro úplnýho začátečníka (i já debil jsem z něj princip pochopil) a nakonec jsem zjistil, že to není zas až tak těžké, jak jsem si zpočátku myslel a spoustu věcí to umožňuje dělat ve finále snadněji, než WF...

Nahoru Odpovědět
14.12.2016 6:41
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Patrik Valkovič:14.12.2016 9:33

Ono ve výsledku můžeš s WPF pracovat stejně jako s WF - prostě to tam naklikáš (i když se to nedělá).

Nahoru Odpovědět
14.12.2016 9:33
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
ostrozan
Tvůrce
Avatar
Odpovídá na HONZ4
ostrozan:15.12.2016 0:27

naposled jsem si zkoušel použití ComboBoxu .. jen kolik desítek řádků bylo potřeba napsat, aby se mě změnila barva pozadí. Dopadlo to tak, že jsem to nevydržel a pokorně vrátil se zase zpět k WF

ano tahle věc může být nepříjemná - ale není to chyba WPF , ale frameworku - do verze 3.5 šlo měnit background u comboboxu úplně normálně - až verze 4 a všechny následující to z nějakého důvodu neumí - ale řešení je snadné a stačí 4x kliknout a přepsat jedno slovo - návod je tady

ale proč to vůbec píšu - nezasvěcený může z tvého popisu nabýt dojmu, že takhle funguje WPF - což není samozřejmě pravda - prostě jsi měl smůlu a narazil na jeden z mála problémů -za který ani WPF nemůže - a klidně se k němu zase vrať :-)

 
Nahoru Odpovědět
15.12.2016 0:27
Avatar
HONZ4
Člen
Avatar
Odpovídá na ostrozan
HONZ4:15.12.2016 18:46

já jsem barvu změnit dokázal (našel jsem si návod na netu), byl to pořádný kus kódu. A to jsem chtěl dosáhnout pouze toho vzhledu jako je na přiloženém obrázku.
Tímto příkladem, jsem chtěl pouze naznačit, že naučit se WPF, zabere ve srovnání s WF mnohem více času.

Právě z důvodu se neustálého navyšování rozlišení grafiky, se musím WPF naučit, protože chci aby aplikace, které napíšu byly použitelné i v budoucnosti.

 
Nahoru Odpovědět
15.12.2016 18:46
Avatar
HONZ4
Člen
Avatar
Odpovídá na Patrik Valkovič
HONZ4:15.12.2016 18:53

Naklikáním se bohužel dají nastavit pouze základní věci.

 
Nahoru Odpovědět
15.12.2016 18:53
Avatar
HONZ4
Člen
Avatar
Odpovídá na Michal Štěpánek
HONZ4:15.12.2016 19:08

Na místní tutoriály jsem se už samozřejmě díval. Doufám, že se autoři neurazí, ale mě moc nesedí. Nejraději mám video tutoriály, ale dobrý v češtině jsem nenašel (anglicky dokážu pochopit jen psaný text).
Už trochu chápu logiku pozicování, ale na pokročilejší úpravy vzhledu jsem pěkný tutoriál nenašel.
Pokud znáš nějaký tutoriál co ti pomohl, budu rád.

Editováno 15.12.2016 19:09
 
Nahoru Odpovědět
15.12.2016 19:08
Avatar
Odpovídá na HONZ4
Michal Štěpánek:15.12.2016 20:43

Ono to pozorování se ti nakonec "vnukne" samo při programování, stačí jen pochopit princip, jak to funguje a co může nebo nemůže být do sebe vnořené... Spousta rad je taky na www.wpftutorial.net a pak samozřejmě na codeproject.com

Nahoru Odpovědět
15.12.2016 20:43
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na HONZ4
Patrik Valkovič:15.12.2016 20:45

Naklikáním se bohužel dají nastavit pouze základní věci.

S tím nesouhlasím. Vedle klasického návrhu je vedle panel Properties, kde jde nastavit cokoliv, co jde napsat do samotného XAMLu. Jen prostě klikání a hledání potřebné Property zabere rozhodně déle než napsání toho XAMLu.
WPF má například oproti WPF mnohem lepší podporu animací.

Nahoru Odpovědět
15.12.2016 20:45
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na HONZ4
Neaktivní uživatel:15.12.2016 21:34

WPF unleashed od Adama Nathana - nejlepší kniha, co jsem kdy četl z oblasti IT. WPF je tam brané velmi komplexně, součástí pokročilé užitečné příklady a konstrukce, jsou vysvětlené důvody toho, proč se věci dělají tak či onak.

Nahoru Odpovědět
15.12.2016 21:34
Neaktivní uživatelský účet
Avatar
lukasko.simon:15.12.2016 23:09

Tiez som mal trochu problem prejst z WF na WPF, ale z odstupom casu som prisiel nato ze WPF ma niekolko vyhod. Ako priklad uvediem poziciovanie, ktore je oproti WF niekde uplne inde a hlavne cely vizual si viete bezproblemov napisat v xamli ako keby ste robili sablonu za pomoci HTML a CSS. Dalsia vec je aplikovanie MVVM patternu alebo pouzitie roznych mvvm frameworkov atd, ktore su na enterprise urovni velmi uzitocne a dost to zprehladnuju cely projekt.

 
Nahoru Odpovědět
15.12.2016 23:09
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 25 zpráv z 25.