Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. 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í.
Avatar
nikos
Neregistrovaný
Avatar
nikos:6.6.2013 20:13

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:6.6.2013 20:17

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

Nahoru Odpovědět
6.6.2013 20:17
You are the greatest project you will ever work on.
Avatar
Odpovídá na
Michal Žůrek - misaz:6.6.2013 20:21

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
6.6.2013 20:21
Avatar
Odpovídá na
Michael Olšavský:6.6.2013 20:43

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 Hartinger
Vlastník
Avatar
Odpovídá na Michal Žůrek - misaz
David Hartinger:6.6.2013 20:44

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

Nahoru Odpovědět
6.6.2013 20:44
You are the greatest project you will ever work on.
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:6.6.2013 20:53

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
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Žůrek - misaz
David Hartinger:6.6.2013 20:56

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
You are the greatest project you will ever work on.
Avatar
nikos
Neregistrovaný
Avatar
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)

 
Nahoru Odpovědět
6.6.2013 21:44
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:6.6.2013 21:50

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:6.6.2013 21:56

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
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:6.6.2013 22:03

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:6.6.2013 22:05

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
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:6.6.2013 22:08

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:7.6.2013 8:29

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
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:7.6.2013 8:56

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:7.6.2013 8:58

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
You are the greatest project you will ever work on.
Avatar
nikos
Neregistrovaný
Avatar
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na David Hartinger
nikos:7.6.2013 9:55

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:7.6.2013 10:00

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
You are the greatest project you will ever work on.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:7.6.2013 10:06

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

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 Hartinger
nikos:7.6.2013 10:10

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:7.6.2013 10:12

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
You are the greatest project you will ever work on.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na David Hartinger
Petr Nymsa:7.6.2013 10:13

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 Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:7.6.2013 10:15

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
You are the greatest project you will ever work on.
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na
Petr Nymsa:7.6.2013 10:20

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 Hartinger
nikos:7.6.2013 10:27

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:7.6.2013 10:31

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
You are the greatest project you will ever work on.
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na Petr Nymsa
nikos:7.6.2013 10:32

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 Hartinger
Vlastník
Avatar
Odpovídá na
David Hartinger:7.6.2013 10:36

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
You are the greatest project you will ever work on.
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na David Hartinger
nikos:7.6.2013 10:43

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 Hartinger
nikos:7.6.2013 10:47

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:7.6.2013 11:03

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
Luboš Běhounek Satik:7.6.2013 12:01

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
7.6.2013 12:01
https://www.facebook.com/peasantsandcastles/
Avatar
nikos
Neregistrovaný
Avatar
nikos:7.6.2013 12:03

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:7.6.2013 12:04

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.