Ako navrhnúť takúto winForm? – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ako navrhnúť takúto winForm? – .NET – Fórum – Programujte.comAko navrhnúť takúto winForm? – .NET – Fórum – Programujte.com

 

yterbium0
Stálý člen
28. 6. 2009   #1
-
0
-

napríklad ukázka vo VS08




prosto že na ľavo budem mať akoby zopár riadkov, a keď naň kliknem, tak sa mi "akoby refrešne" pravá strana...


rozmýšlal som riešiť to cez novú form, a starú potom zavrieť, ale to sa mi zdá "nedobré". Neskúšal niekto už neičo takéto spraviť?

Nahlásit jako SPAM
IP: 78.99.193.–
Quiark0
Věrný člen
28. 6. 2009   #2
-
0
-

No přes ten nový form to asi není zas tak špatný nápad. Ale když to bude Form, bude to mít vlastní okno. Takže spíš si vytvořit vlastní Control třeba pro každou stránku. A taky nějak promyslet, jak a kam ukládat to všechno nastavení (když starý form smažeš).

Nahlásit jako SPAM
IP: 193.86.140.–
z_moravec
~ Redaktor
+3
Posthunter
28. 6. 2009   #3
-
0
-

Můžeš použít komponentu tabControl.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
dannyk0
Věrný člen
28. 6. 2009   #4
-
0
-

Ja resil neco podobneho a vyresil jsem to docela zajimavym zpusobem, ale ma trochu svoje chybicky a je to trochu dyl, co jsem na tom pracoval a dneska bych nejake veci resil jednoduseji.

Mel jsem formular, kde jsem vlevo vybiral polozky a pravo se mi menilo nastaveni, presne tak, jak chces.
V te prave casti, kde se maji menit komponenty mam Panel, ktery ma nastavny layout na Center.Dale mam vytvorene User Components, kde mam naskladane potrebne komponenty atd. Pak po kliknuti na vyber vlevo vymazu Panel (Panel.Controls.Clear()) a pridam to nej ty user componenty podle vyberu (Panel.Controls.Add()).
Dale jsem mel na jednotlivych komponentach event, ktery hlidal zmenu a pokud nastala nejaka, tak zpristupnil tlacitko pouzit a dalsi potrebne veci.

Takova chybka tohodle navrhu je, ze ten user control se neroztahuje presne podle toho panelu (aspon me se to nepodarilo pomoci jeho properties najit), takze se muze stat, ze kdyz budes mit tu user componentu velkou a pridas ji na ten panel, tak muzes mit pulku orezanou.Ja to vyresil tak, ze jsem si tu komponentu vzdycky roztahl na velikost toho panelu.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
yterbium0
Stálý člen
28. 6. 2009   #5
-
0
-

dobre, na mna trošku jednoduchšie :smile5:


to TabControl je skvelé, presne to som potreboval(asi na to to tam je...)

lenže ja to potrebujem horizontálne, ale text píše vertikálne, ukážka:



tak som našiel toto:
http://en.csharp-online.net/TabControl#Render_Right-Aligned_or_Left-Aligned_Tabs_horizontally

je to tam celkom pekne napísané, ale vôebc tomu nechápem (a nechcem len kopírovať text, snažím sa aj naučiť niečo...)

čiže čo je tam vlastne to tabControl1_DrawItem, čo to robí? A čo je to "e"? Vopred ďakujem aspoň za základné objasnenie ak by sa niekomu chcelo :smile8:

Nahlásit jako SPAM
IP: 78.99.193.–
mnn
~ Anonymní uživatel
118 příspěvků
28. 6. 2009   #6
-
0
-

dannykov sposob je dobry, ibaze ja by som vytvoril tolko Panelov, kolko by som mal zaloziek a len by som schovaval ostatne a zobrazil ten na ktory uzivatel klikol.

Nahlásit jako SPAM
IP: 78.98.68.–
Quiark0
Věrný člen
28. 6. 2009   #7
-
0
-

Pokud chceš text vertikálně, musíš si napsat vlastní kód, který to bude kreslit. Ten tvůj odkaz ukazuje jak (akorát místo červeného pozadí budeš kreslit otočeně). Musíš si nejdřív zaregistrovat příjem zpráv DrawItem (klíčové slovo pro hledání je event). V metodě, která tyto zprávy bude přijímat pak budeš kreslit. Na té stránce mají ukázaný obsah té metody, registraci příjmu zpráv tam nemají (to se dělá buď v návrháři oken nebo pomocí toho +=).

A zapomněl jsem se zmínit o tom e. To je parametr, který obsahuje nějaké další informace o té události. Například je v něm ten objekt, do kterého se má kreslit.

Nahlásit jako SPAM
IP: 193.86.140.–
yterbium0
Stálý člen
29. 6. 2009   #8
-
0
-

Díky páni, nakoniec sa mi to podarilo,

dospel som k záveru, že VS je o mnoho inteligentnejší nástroj, ako som ho na začiatku pokladal. Som si uvedomil, že ja som sprostý. Tu je kod, dúfam, že som ho dal dokopy dobre aj s vysvetlivkami... ak náhodou niečo pls opravte, ale mne to funguje...
1/ najprv nastaviť tabControl Alignment =Right, SizeMode =Fixed,DrawMode=OwnerDrawFixed, ItemSizeWidth = 20, ItemSizeHeight = 80

následne v preporities okne kliknút na"events" a vybrať "DrawItem" a potom samotny kod

private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)

{
Graphics g = e.Graphics;
Brush farbaPisma;

// Povyberame po jednom taby akoby "prva", "druha" atd...
TabPage konkretnyTab = tabControl1.TabPages[e.Index];

// vybereme obdlznik, v ktorom je jednotlivy tab, cize prvy, druhy atd...
Rectangle obdlznikDanehoTabu = tabControl1.GetTabRect(e.Index);

if (e.State == DrawItemState.Selected)
{
// obsluzime tab, ktory je vybrany, cize oznaceny
farbaPisma = new SolidBrush(Color.Black); //farba pisma na vybranom tabe
g.FillRectangle(Brushes.White, obdlznikDanehoTabu); // farba pozadia vybraneho tabu
}
else
{
// tab ktory nie je vybraty, cize vsetky co nie su oznacene
farbaPisma = new SolidBrush(Color.Black); // farba pisma na nevybratom tabe, ja som nechal v oboch ciernu, cize toto som nemusel davat do pomienky
g.FillRectangle(Brushes.LightGray, obdlznikDanehoTabu); //farba pozadia tabu, ktory nie je vybraty

}

// nadefinujeme si font, lebo ho potrebujeme pri vykreslovani retazca ako parameter
Font fontPisma = new Font("Arial", 10, FontStyle.Bold, GraphicsUnit.Pixel);


StringFormat formatTextu = new StringFormat(); //format textu ziskame, akoze orientaciu a pod.
formatTextu.Alignment = StringAlignment.Center; // zarovname na stred
formatTextu.LineAlignment = StringAlignment.Center; // zarovna text na horizontalny cize do riadku
// napiseme text, ktory ma tab.txt, dame font, farbu pisma, vybrany odblznik, zhorizontalneny text vypiseme...
g.DrawString(konkretnyTab.Text, fontPisma, farbaPisma, obdlznikDanehoTabu, formatTextu);
// mame co som chcel



btw: len otázkaa:
aké označenie má základná farba winForm? lebo som ju nevedel nájsť

Nahlásit jako SPAM
IP: 78.99.193.–
yterbium0
Stálý člen
29. 6. 2009   #9
-
0
-

ešte mám jednu otázku...

ja som to vlastne chcel pridať do jednej aplikácie, čo už mám spravenú.

Lenže ako to nastavím tak, aby tá moja spravená app ležala na jednom tabe? na druhý si už ostatné dorobím potom?

musím to na novo navrhnúť?

Nahlásit jako SPAM
IP: 78.99.193.–
Quiark0
Věrný člen
29. 6. 2009   #10
-
0
-

Tu aplikaci máš pravděpodobně jako Form.. a ten asi (bez nějakých ošklivých triků) do tabu nenacpeš. Ale pokud z toho Form uděláš Control, vznikne ti uživatelský prvek, který tam můžeš přidat. A tu změnu můžeš udělat poměrně snadno tak, že změníš bázovou třídu z Form na Control.

Nahlásit jako SPAM
IP: 193.86.140.–
yterbium0
Stálý člen
29. 6. 2009   #11
-
0
-

no dobre, to je už asi na teraz na mňa priveľa :-(

nevadí, nemám tam až tak veľa toho, takže to do hodinky určite prepíšem a navrhnem


ale ešte raz díky :smile7:

Nahlásit jako SPAM
IP: 78.99.193.–
alesk0
Duch
3. 7. 2009   #12
-
0
-

cau ... resim podobny layout formu a pouzil jsem metodu, kterou popsal dannyk. Komponente (Windows Form User Control) jsem nastavil rozmery panelu ve kterem se zobrazuje. To vsechno funguje, problem ale nastava kdyz roztahnu cely formular komponenta zustane stejne velka. Zkousel jsem nastavovat vlastnosti Anchor a v udalosti Form_Resize() pouzit metody Refresh() a Invalidate() ale porad nic. Jestli jste nekdo prisel na reseni, prosim poradte.
diky

Nahlásit jako SPAM
IP: 213.226.196.–
dannyk0
Věrný člen
3. 7. 2009   #13
-
0
-

2 alesk: To je jeden z problemu, ktery jsem mel na mysli, ja to chvili resil a pak sem nastavil velikost formu natvrdo. Jedine, co me tedka tak nejak napada je zkusit zjistovat Bounds u toho panelu, do ktereho vkladas a ty same hodnoty nastavit tem User Controls.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

Podobná vlákna

Winsock v WinForm — založil seldik

C# WinForm programování — založil matesz

C++ a winform background-image... — založil Anonymní uživatel

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý