Diskuze: Form designer
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Neregistrovaný

Zobrazeno 35 zpráv z 35.
//= 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.
Designer dělá jen to, co říkáš, žádné messageboxy ti tam určitě
neumisťuje
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á
Ale funguje to dokonale, jen se evidentně hrabal ve vygenerovaném kódu.
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.
Protože vymažeš metodu v kódu a ne v designeru, jak jsem řekl, designer funguje správně.
Pošlete nám nějaké info ohledně erroů, obrázek cokoliv. Mám dojem že MessageBox jak jej známe my je asi podle vás něco jiného
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.
Ne to normální není. Rozklikni klasicky Form1 v Solution Explorer. Je blbost aby se zobrazily když aplikace neběží ....
Tak jsem připravil video, pokud by se chtěl někdo podívat a poradit, rád
ho zašlu (asi 0,5 MB).
Díky, nikos
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.
Potřeboval bych vidět zdroják toho formu, jak designeru, tak logiky. Každopádně to dědění je dost divoké, určitě bych se mu vyhnul.
Tak to je opravdu divný, jak říká David Hartinger chtělo by to vidět zdrojové kódy. Klidně to pošli jenom jemu pokud potřebuješ zachovat tajnost kódu
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
A z jakého důvodu to dědíš? Pro sdílení databázových spojení a dalších věcí si udělej třeba statickou třídu.
Použij pro sdílení statickou třídu a názvy tříd jsou také celkem rošáda.
Celé je to nesmysl, není žádný důvod ty formuláře dědit a ještě takhle divně, nevím kde je třída Frm.
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:
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.
Ještě k příspěvku z 07.06.2013 10:20:45:
V tom co jsem poslal je:
Model: třída dataSet
ModelView: třída Connector
View: třída dataGrid
Designer spousti u komponent normalne udalosti,
do using si pridej
using System.ComponentModel;
a pak v kodu podle
LicenseManager.UsageMode
poznas, jestli jsi v design nebo v runtime.
tj. ty budes asi chtit v metode SetFields() udelat tohle:
if (LicenseManager.UsageMode != LicenseUsageMode.Designtime)
{
this.connectionString = "Provider=vfpoledb.1;Collating Sequence=machine;";
}
Ano, to je v podstatě to, k čemu jsem se dostal na jiném Foru a k čemu
směřovala moje původní otázka.
Díky, nikos
Zobrazeno 35 zpráv z 35.