Pouze tento týden sleva až 80 % na e-learning týkající
se Pythonu. Zároveň využij narozeninovou akci až 80
% zdarma při nákupu e-learningu - Více
informací.
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í.
Dobrý den.
Může mi, prosím, někdo objasnit (nebo uvést odkaz), jak funguje u Formu
visuální designer (Shift+F7).
Mám třikrát poděděný Form a když si ho chci zobrazit v Designeru,
dostávám chybu a současně mi, zdá se, probíhá spousta kódu, která z
mého pohledu s vizuálním návrhem nesouvisí (např. Messageboxy).
Měl jsem představu, že designer pomáhá pouze umísťovat kontroly a
přidávat jim funkčnost.
Díky, nikos
v c# to nefunguje dokonale, chyby se mi tam zobrazují v jednom kuse. Ve
VB.NET je to lepší, tam jsem to vyděl jen jednou, když jsem pro něj
nečekaně odpojil databázi.
Dělá se v designeru jednoduše, prvky přetahuješ z toolboxu, nastavuješ
properties a toto by ti nemělo nic udělat, jen je tu jeden háček a to když
v kódu odebereš obsluhu události, tak to v c# začne hlásit chybu, že to tu
obsluhu nenšlo, ve VB.NET to funguje a chybu toto nehlásí, když to obsluhu
nenajde, v designeru se smaže na ni odkaz.
Chyby se odstraňují tak, že si otevřeš soubor Form1.designer.cs
(případně vb) nebo tak něco a tam upravíš chybu, pak se ti to i ve visual
studiu zobrazí dobře.
Příště není na chybu sem uvést info o chybě, která se ti zobrazuje.
Nikdo z nás nevlastní věšteckou kouli.
Přesně jak říká Michal Žůrek - misaz. Něco jsi upravoval (asi jsi smazal
nějaký event) a nyní to hlásí chybu. Vlez do desgineru a to červeně
podtrhlé odstraň.
Ty messageboxy jsou errory. Ne že ti je to tam přidává
to je dost možné, ale je pravda že obšas si v tom visual studio udělá
bordel samo. Ve windows store aplikací je to trochu častější, ale přežít
se to dá.
Ty eventy si nevymýšlím. To mám z praxe, nějaké to missing
Button1_Click() mi to háže víceméně furt.
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
nikos
Neregistrovaný
nikos:6.6.2013 21:44
Dobrý den.
Děkuji za reakce, ale otázka zněla jinak. Neříkám, že mi to tam
messageboxy přidává, ale zobrazuje mi je to stejně, jako bych pustil debug
(F5)
Nejsem registrován, takže obrázek nepřidám. Mám v kódu messageboxy, ty
se mi objeví po Shift+F7. Nejde o žádné chyby. Je to standardní messagebox,
který mi zobrazuje "TEST 1"
Zirko: Jistě, úmyslně. Otázka zní, zda je normální, aby se mi
zobrazovaly messageboxy při snaze otevřít Form v designeru. Čekal bych, že
se mi budou objevovat jen při spuštění aplikace. O tom je základní otázka
- jak funguje designer.
Otázka nezněla nijak, pokud chceš lepší odpovědi, lépe se zeptej. Mám
pocit, že tématu moc nerozumíš, protože jsi nebyl za 5 příspěvků
schopný vysvětlit o co jde. Pokud se ti zobrazí MessageBox s chybou, je to
logické, designer ti říká, že jsi mu rozbil kód a že to máš opravit.
Nevím jaký smysl má sem psát že někomu zašleš video, prostě sem na něj
dej odkaz.
Pročítám si zpětně svoje příspěvky a zdá se mi, že jsem
několikrát opakoval, že nejde o Messagebox s chybou, ale mnou definovaný
Messagebox s textem "TEST". Překvapuje mě, že se zobrazuje (a tudíž se
spouští nějaký kód v mé tídě), když chci pouze otevří Form v
návrháři.
Tridy jsem zabalil sem: http://dostipy.com/…rp/tridy.zip
Nyní to zkouším na třídě FrmDataXXX (zděděná z FrmDataDBF)
Snažím se přepsat logiku, kterou mám pro framework ve FoxPro - logika tříd
je tato:
Frm - základní (pro případné změny ve verzích .NET)
-> FrmData - základní logika pro práci s daty (tlačítka a grid)
|
-> FrmDataDBF - pro práci s DBF soubory (vedle toho je FrmDataSQL)
|
-> zde už by měly být odvozeny formy pro jednotlivé projekty
Neměl by jsi míchat logiku a zobrazení dohromady. U menších aplikací se
to vlastně může smísit lepší je použí třeba model MVVM - Model - View
-ViewModel. Model je čistě třída která drží / zpracovává data,
ViewModel bere interakce od view (uživatele) a předává view zpracovaná
data, View - zobrazuje data, neví jak se data zpracovala, proostě je jenom
zobrazí.
Formuláře tedy neděď. Stejně předpokládám že formuláře budou mít
jiný pohled. Vytvoř si třídy jako DataWorker, DataWrapper, prostě něco co
bude viset nad View, resp. ViewModelem a pokud potřebuješ přístup ode všad,
což pravděpodobně jo, udělej bud celou třídu jako statickou nebo lépe v
Main - resp. App třídě udělej statickou instanci té třídy....
Doufám, že vše chápeš, nepřipadá mi že by jsi byl zcela
začátečník
Třída Frm je v LUR.Classes.
Dědí se takto, protože:
jsou různé projekty, každý má spoustu Formů
tyto Formy mají spoustu společných vlastností (např Ikonu, umístění
DBF soubor, proto je třída FrmDataDBF
nepracuji pouze s DBF soubory, ale i MSSQL, ta má spoustu společného s
FrmDataDBF, proto třída frmData
třída Frm se mi osvědčila při změnách verzí Frameworku (zde .NET),
když bylo přestaveno nějaké nastavení
Obecně - tento objektový model mi vyhovuje a pracuju s ním 10 let. Jen v
C# místy tápu a někdy se to chová (z mého pohledu) podivně - tedy jinak,
než jsem zvyklý (viz video).
K dědění není žádný důvod, data jsou ve třídě s logikou, která je
sdílená, ne ve formulářích. Kromě ikony mě vůbec nenapadá, co by
formuláře mohly mít společného. Asi bys měl začít používat objektový
model, který je pro tento typ aplikací vhodný.
Ano, snažím se oddělovat zobrazení od logiky, proto třída Connector,
která je na Form přidána a která zajišťuje (podle typu) připojení ke
zdroji dat (zatím DBF, MSSQL, přibyde Oracle). Jestliže má každý zdroj
jinou třídu pro připojení, mám pro každý zdroj dat jinou třídu (Form)
zděděnou ze základní (kde je pouze grid a tlačítka). Vlastní SQL dotazy
jsou až na další úrovni podle jedntlivých projektů (míněno uživatelské
aplikace)
Ono dnes i psát SQL dotazy je přežitek, existuje Entity Framework: http://msdn.microsoft.com/…data/ef.aspx. Je to jednotný
způsob práce s daty, který je objektový a nezávisí na typu zdroje.
Nejdůležitější je, že Formy pro DBF aplikace mají společný Connector
(nastavení ConnectStringu na objekt OleDbConnection), formy pro MSSQL server
mají jiný Connector (s objektem SqlConnection), pro Oracle to bude zase jiný
Connector)
Díky za odkaz, kouknu na to. Nicméně momentálně se učím základy a
rád bych měl jazyk v rukách, tedy věděl, co se děje, když v rozhraní
udělám to a to. I ve FoxPro můžu požít různá udělátka, ale přesně
vím, co to kde udělá. Nejsem příliš velkým příznivcem těchto
přístupů přes proprietární nástroje.
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.