Avatar
nikos
Neregistrovaný
Avatar
nikos:

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

 
Odpovědět 6.6.2013 20:13
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:

Designer dělá jen to, co říkáš, žádné messageboxy ti tam určitě neumisťuje :)

Nahoru Odpovědět 6.6.2013 20:17
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na nikos
Michal Žůrek (misaz):

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.

Editováno 6.6.2013 20:22
Nahoru Odpovědět  +1 6.6.2013 20:21
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na nikos
Michael Olšavský:

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á :D

 
Nahoru Odpovědět 6.6.2013 20:43
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
David Čápka:

Ale funguje to dokonale, jen se evidentně hrabal ve vygenerovaném kódu.

Nahoru Odpovědět 6.6.2013 20:44
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Michal Žůrek (misaz):

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.

Nahoru Odpovědět 6.6.2013 20:53
Nesnáším {}, proto se jim vyhýbám.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
David Čápka:

Protože vymažeš metodu v kódu a ne v designeru, jak jsem řekl, designer funguje správně.

Nahoru Odpovědět 6.6.2013 20:56
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
nikos
Neregistrovaný
Avatar
nikos:

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)

 
Nahoru Odpovědět 6.6.2013 21:44
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na nikos
Petr Nymsa:

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

Nahoru Odpovědět 6.6.2013 21:50
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na Petr Nymsa
nikos:

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"

 
Nahoru Odpovědět 6.6.2013 21:56
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na nikos
Petr Nymsa:

V tom případě někde v kódu sis napsal MessageBox.Show().

Nahoru Odpovědět 6.6.2013 22:03
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na Petr Nymsa
nikos:

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.

 
Nahoru Odpovědět 6.6.2013 22:05
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na nikos
Petr Nymsa:

Ne to normální není. Rozklikni klasicky Form1 v Solution Explorer. Je blbost aby se zobrazily když aplikace neběží ....

Nahoru Odpovědět 6.6.2013 22:08
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na Petr Nymsa
nikos:

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

 
Nahoru Odpovědět 7.6.2013 8:29
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na nikos
Petr Nymsa:

Umístit ho na SkyDrive, DropBox, cokoliv

Nahoru Odpovědět 7.6.2013 8:56
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:

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.

Nahoru Odpovědět 7.6.2013 8:58
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
nikos
Neregistrovaný
Avatar
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na David Čápka
nikos:

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.

 
Nahoru Odpovědět 7.6.2013 9:55
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:

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.

Nahoru Odpovědět 7.6.2013 10:00
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na nikos
Petr Nymsa:

Tak to je opravdu divný, jak říká David Čápka chtělo by to vidět zdrojové kódy. Klidně to pošli jenom jemu pokud potřebuješ zachovat tajnost kódu

Nahoru Odpovědět 7.6.2013 10:06
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na David Čápka
nikos:

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

 
Nahoru Odpovědět 7.6.2013 10:10
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:

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.

Nahoru Odpovědět 7.6.2013 10:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na David Čápka
Petr Nymsa:

Použij pro sdílení statickou třídu a názvy tříd jsou také celkem rošáda.

Nahoru Odpovědět 7.6.2013 10:13
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Petr Nymsa
David Čápka:

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.

Nahoru Odpovědět 7.6.2013 10:15
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na nikos
Petr Nymsa:

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 :)

Nahoru Odpovědět 7.6.2013 10:20
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na David Čápka
nikos:

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).

 
Nahoru Odpovědět 7.6.2013 10:27
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:

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ý.

Nahoru Odpovědět 7.6.2013 10:31
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na Petr Nymsa
nikos:

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)

 
Nahoru Odpovědět 7.6.2013 10:32
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:

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.

Nahoru Odpovědět 7.6.2013 10:36
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na David Čápka
nikos:

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)

 
Nahoru Odpovědět 7.6.2013 10:43
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na David Čápka
nikos:

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.

 
Nahoru Odpovědět 7.6.2013 10:47
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na Petr Nymsa
nikos:

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

 
Nahoru Odpovědět 7.6.2013 11:03
Avatar
Odpovídá na nikos
Luboš Běhounek (Satik):

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;";
}
Nahoru Odpovědět  +1 7.6.2013 12:01
:)
Avatar
nikos
Neregistrovaný
Avatar
nikos:

Díky všem, na jiném Foru jsem to již dořešil
nikos

 
Nahoru Odpovědět 7.6.2013 12:03
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na Luboš Běhounek (Satik)
nikos:

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

 
Nahoru Odpovědět 7.6.2013 12:04
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 35 zpráv z 35.