NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
BENN
Člen
Avatar
BENN:31.3.2016 13:30

Zdravím, potřeboval bych poradit s programem psaným ve Visual Studiu C++ 2003. Jedná se o "Window Form" program, kde je asi 15 záložek a v každé záložce je celkem dost ovládácích prvků (labely, buttony, comboboxy atd.). Celkově je v tomto hlavním formuláři asi 2000 prvků. Soubor Form1.h má velikost přes 2MB. V příloze je obrázek, jak to vypadá.

A toto množství prvků dělá problém už u samotného otvírání projektu, které trvá asi 10minut. Nebo doplnění Form1.h a přepnutí do designéru formuláře je stejná doba. Tohle ještě zkousnu, ale od jistého počtu už mě designér umožňuje vkládát další prvky, ale už mě je zakázal mazat.

Proto bych se chtěl optat, jak řešíte aplikace s velkým množství ovládácích prvků? Je třeba možné pro každou záložku založit vlastní formůlář, ale prvky zobrazovat v hlavním formuláři? Do Form1.h už nechci nic přidávat a spíš to nějak řešit dalšími soubory.

Zkoušel jsem projekt převést na Visual Studio C++ 2015, což dle výpisu zvládl. Ale při pokusu o otevření hlavního formuláře v designéru se s tím nějakou dobu pere a pak se zobrazí "unknown error" bez dalších detailů.

 
Odpovědět
31.3.2016 13:30
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na BENN
Martin Dráb:31.3.2016 14:02

Můžeš generovat (nebo jeho část) obsah formuláře dynamicky. Může to být dost otrava, pokud chceš nějaké přesnější pozicování jednotlivých prvků.

Zobrazovat formulář jako záložku by mohlo jít, ale nevím, zda tam bude přímá podpora. S tím mám dobrou zkušenost v Delphi (stačilo dané záložce nastavit Handle na Handle toho formuláře a skoro bylo hotovo).

Nahoru Odpovědět
31.3.2016 14:02
2 + 2 = 5 for extremely large values of 2
Avatar
LacoS.
Člen
Avatar
LacoS.:8.4.2016 13:56

... na obraz si vloz IBA prazdny "TabControl"

... kazdu obrazovku/zalozku si vytvor ako vlastny 'UserControl' (nieco, ako Form...

... do funkcie OnLoad (alebo niekde na zac. programu) vloz nieco taketo:

private void Form1_Load(object sender, EventArgs e)
{
    UserControl1 uc1 = new UserControl1();
    TabPage tp1 = new TabPage("111");
    tp1.Controls.Add(uc1);
    tabControl1.Controls.Add(tp1);

    UserControl2 uc2 = new UserControl2();
    TabPage tp2 = new TabPage("222");
    tp2.Controls.Add(uc2);
    tabControl1.Controls.Add(tp2);
}
 
Nahoru Odpovědět
8.4.2016 13:56
Avatar
BENN
Člen
Avatar
BENN:11.4.2016 14:02

Zatím jsem zkusil přidat další Form2, kde je pouze TabControl stejné velikosti s několika TabPage a ty registrovat v hlavním Form1. Navíc do Form2 jsem musel předat několik odkazů na další objekty (StatusBar, komunikační protokoly, atd.). Zatím to vypadá, jako schůdné řešení. S UserControl to tipuju, že to bude podobný.

Podařilo se mě převést projekt i pro VS C++ 2015 i s designérem. Sice popisované chyby s práci s prvky v designéru vymizely, ale i tak designér načte formulář za stejnou dobu. Zatím zůstanu u VS 2003.

 
Nahoru Odpovědět
11.4.2016 14:02
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 4 zpráv z 4.