Diskuze: WinForm - 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.
Ahoj, řekl bych, že buď si budeš muset vytvořit vlastní komponentu a nebo zkus třeba toto http://stackoverflow.com/…visual-basic
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ář.
Nebo nepoužívej WinForms, jsou už mrtvé, nechápu proč se v tom chce pořád někdo učit....
Já taky dělám WF. A to hlavně ze třech důvodů:
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.
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);
}
}
}
}
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.
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šší.
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.
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?
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...
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.
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í.
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...
Ono ve výsledku můžeš s WPF pracovat stejně jako s WF - prostě to tam naklikáš (i když se to nedělá).
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ť
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.
Naklikáním se bohužel dají nastavit pouze základní věci.
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.
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
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í.
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.
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.
Zobrazeno 25 zpráv z 25.