Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
nikos
Neregistrovaný
Avatar
nikos:10.6.2013 15:01

Prosím o nasměrování k (pravděpodobně) začátečnickému problému:
vytvořil jsem si v namespace MujForm knihovnu MujForm a na Form unístil designerem DatagrivView dgv.
Vytvořil jsem jiný namespace (XXX) a v něm v jedné třídě v jedné metodě vytvořil proměnnou:
MujForm frm=new MujForm();
Pokud udělám frm.Open(), vše je OK, Form se otevře, tzn., že třída MujForm je referencovaná a je vidět. Bohužel se nemůžu dostat na člen dgv a nastavovat mu vlastnosti z této metody. Myslel jsem, že je to proto, že dgv není vidět (byla vygenerována jako private), tak jsem jí přepsal jako public, bohužel stále nevidím žádný člen MujForm. Kde může být zakopaný pes ??
Díky, nikos

 
Odpovědět 10.6.2013 15:01
Avatar
Kit
Redaktor
Avatar
Odpovídá na nikos
Kit:10.6.2013 15:07

Asi v nepochopení objektového programování. Bezmyšlenkovité přepisování private na public je cestou do pekel.

Jakou to má souvislost s děděním?

Nahoru Odpovědět  +2 10.6.2013 15:07
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
nikos
Neregistrovaný
Avatar
Odpovídá na Kit
nikos:10.6.2013 15:13

Díky, hodně jste mi pomohl. Stálo Vám to za ten čas - psát takovouhle volovinu ?

 
Nahoru Odpovědět 10.6.2013 15:13
Avatar
Odpovídá na nikos
Michal Žůrek (misaz):10.6.2013 15:16

Já jsem to taky tvůj dotaz příliš nepochopil.

Na namenspace se vykašli, namenspace se hodí asi jen když děláš nějakou knihovnu třetích stran.

Nahoru Odpovědět 10.6.2013 15:16
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na nikos
Michal Žůrek (misaz):10.6.2013 15:17

Odkázat tě můžeme pouze na tutorial OOP.

http://www.itnetwork.cz/csharp/oop

Nahoru Odpovědět  +1 10.6.2013 15:17
Nesnáším {}, proto se jim vyhýbám.
Avatar
nikos
Neregistrovaný
Avatar
nikos:10.6.2013 15:18

Misaz: díky za snahu :o))

 
Nahoru Odpovědět 10.6.2013 15:18
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:10.6.2013 15:33

Generovaný kód určitě nepřepisuj. Nenapadá mě důvod, proč přistupovat ke kontrolkám jednoho formuláře z druhého. DataGridView má nějaký obsah, tak si udělej veřejnou metodu, která ti ho vrátí. Celé dgv přeci nepotřebuješ.

Nahoru Odpovědět 10.6.2013 15:33
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:10.6.2013 15:36

Snažím se naopak podstrčit dgv tabulku jako zdroj dat z jiného objektu (DataSet).

 
Nahoru Odpovědět 10.6.2013 15:36
Avatar
nikos
Neregistrovaný
Avatar
nikos:10.6.2013 15:38

Zkusím to přes veřejný setter. Díky!

 
Nahoru Odpovědět 10.6.2013 15:38
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:10.6.2013 15:38

Ale dgv není žádný zdroj, je to kontrolka co ukazuje zdroj. Zdroj máš třeba v listu nebo v databázi. Proto formy ani nepočítají s tím, že by kontrolky měly být přístupné zvenku. Udělej si ve formu metodu co ti vrátí data, ne kontrol.

Nahoru Odpovědět 10.6.2013 15:38
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:10.6.2013 15:51

Ano, píšu, že se snažím dgv (komu čemu 3.pád, tedy gridu - kontrolce) podstrčit Tabulku jako zdroj dat.

Teď jsem si vytvořil ve Formu metodu:

public void SetGridDataSou­rce(DataSet ds) {
this.dgvData.Da­taSource = ds.Tables[0];
}

Bohužel stále jí v objektu, odkud jí chci volat nevidím. - vidím jen vlastnosti a metodu základní třídy Form, přitom vytvořit objekt Formu se mi podaří a zobrazit ho taky.
nikos

 
Nahoru Odpovědět 10.6.2013 15:51
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:10.6.2013 16:24

To je divné, nemáš ten formulář v proměnné typu Form místo TvujNazevFormu?

Nahoru Odpovědět 10.6.2013 16:24
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:10.6.2013 16:29

Mám to takto:

FrmData frm = new FrmData();
// toto háže chybu: frm.SetGridDa­taSource(ds);
frm.Show(); // toto projde OK

nikos

 
Nahoru Odpovědět 10.6.2013 16:29
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:10.6.2013 16:30

To není možné, pokud máš ve třídě s formulářem veřejnou metodu, tak je samozřejmě viditelná.

Nahoru Odpovědět 10.6.2013 16:30
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:10.6.2013 16:54

To bych předpokládal, proto mě to překvapuje.

 
Nahoru Odpovědět 10.6.2013 16:54
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:10.6.2013 16:57

Asi nám budeš muset poslat ten projekt, tohle prostě funguje, používal jsem to stokrát.

Nahoru Odpovědět 10.6.2013 16:57
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:10.6.2013 17:04

Teď jsem si do projektu (DLL) přidal další Form (MujForm1 : Form), jen jsem na něj přidal DataGridView.
Co všechno musím udělat, abych tuto třídu viděl z druhého projektu ?
Uložil jsem všechny soubory a udělal Build (F6)
Je potřeba nějak v druhém projektu obnovit prostředí, aby se aktualizovaly třídy v DLL (mám CopyLocal=true)
Dky, nikos

 
Nahoru Odpovědět 10.6.2013 17:04
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na nikos
David Čápka:10.6.2013 17:25

Mělo by to stačit jen zbuildit a přidat referenci do druhého projektu, ale tohle jsem praktikoval většinou jen u testů.

Nahoru Odpovědět 10.6.2013 17:25
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:10.6.2013 22:30

To je zvláštní, přidával jsem sem řešení. Problém byl v tom, že nějaký proces držel DLL a nedělal se Rebuild. Po přestartu PC a rebuildu jsem všechno viděl normálně.
Díky !

 
Nahoru Odpovědět 10.6.2013 22:30
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 19 zpráv z 19.