[ ghost2k3 @ 23.09.2013. 08:55 ] @
Ovako imam klasu koja nasledjuje Form. Tu moju klasu nasledjuju ostale klase. Te ostale klase ne mogu da se otvore u dizajneru. Kada zakomentarisem nasledjivanje moje klasi u toj novoj formi, a vratim na Form, sve radi.

public MyClass : Form
{}

public NewClass : MyClass
{
//ne radi designer
}

public NewClass : Form //MyClass
{
//radi designer
}


Ta moja klasa koja se nalazi izmedju u tom lancu nasledjivanja nesto izmeni da dizajner ne radi.
Zakomentarisao sam klasu, tako da prakticno imam praznu klasu i opet ne radi.
Da li je moguce da se nesto "izmeni" kod tog nasledjivanja, bez mog znanja, i da to pokvari dizajner.

Kada se iskompajlira i pokrene aplikacija, sve radi. Ne radi samo dizajner, sto zna biti prilicno iritantno kada treba nesto menjati na UI.
[ dusans @ 23.09.2013. 09:09 ] @
Da ti nije MyClass slučajno abstraktna (abstract)?
Ili si možda sakrio konstruktor?
Koja je greška u Designer-u kada probaš da otvoriš NewClass?
[ AMD guy @ 23.09.2013. 09:18 ] @
Svi dizajn elementi se nalaze u design fajlu, ako mu se dizajner ne prikazjue greska je verovatno u imefajla.design.cs fajlu, ili ima pogresnu ideju o nasledjivanju.
Evo kako ja mislim da on zamislja nasledjivanje(Njegovo je u crvenom, moje u zelenom)
[ ghost2k3 @ 23.09.2013. 10:27 ] @
Nije apstraktna, niti sam sakrio ctor.

Zaboravio sam da dodam i to, da se ta greska ne javlja uvek, nego skoro uvek, ali je jednako neuoptrebljivo i ovo drugo stanje. U tom drugom stanju se nekad dizajner otvori, ali samo imam obrise od forme, sa onom tacka-linijom, ne vidim nista. Kada kliknam na kontrole u properties dlg, javljaju mi se nekad i njihovi obrisi, ali cesto budu nenormalno razbacani po formi, sto nema veze sa stvarnim stanje. Napominjem da kada se izbilda sve radi ok.


Zasto je to pogresno nasledjivanje?
Moja base forma ima neka podesavanja koja hocu da imaju sve forme. Tako da se ona nalazi izmedju Form i formi koje se kasnije vide na UI. To sto si nacrtao u zelenom mi ne treba u ovom slucaju.
Base forma nema UI, odnosno ne dodajem nista ne njega, samo ono sto je nasledjeno od Form. Unutra se samo nalaze eventhandleri za neke event, load, close ....
[ dusans @ 23.09.2013. 10:32 ] @
Da li si proverio u SVIM .design.cs fajlovima ovo što ti je napisao AMD (da je i tu svuda nasleđena dobra klasa)?
Takođe, ja bih MyClass napravio kao "klot" klasu - obrisao bih designer fajl, partial, InitializeComponent, itd...


[Ovu poruku je menjao dusans dana 23.09.2013. u 12:12 GMT+1]
[ Burgos @ 23.09.2013. 11:19 ] @
U svakoj klasi u lancu moraš u default konstruktoru pozvati svoju InitializeComponent. Nakon toga zatvori dizajner i rebilduj projekat. Takođe, sav tvoj kod u kontruktoru koji nije potreban u toku dizajniranja izvršavaj samo ako se ne nalaziš u DesignModu:


Code:

if (!this.DesignMode) {
    // tvoj kod
}
[ ghost2k3 @ 23.09.2013. 12:10 ] @
Sve je to ok postavljeno.
Nasao sam ipak koren problema:
Code:

protected override void OnCreateControl()
{
            this.formPlacement = new FormPlacement();
             ...
            try
            {
                this.formPlacement .RefreshZeroSize(this);
                this.formPlacement = true;
 ----->>>> this.formPlacement.SetPlacement(Handle);
                OnPlacementRestorePerfromed();
            }
            catch (Exception exception )
            {
                        ...
             }
            finally
            {
                this.formPlacement = false;
                this.formPlacement = null;
            }
            base.OnCreateControl();
            this.Invalidate();
}


Ta gore oznacena linija pravi problem.


Klasa FormPlacement koristi:
[DllImport("user32.dll")]
public static extern bool SetWindowPlacement(IntPtr hWnd, [In] ref WINDOWPLACEMENT lpwndpl);
[ Burgos @ 23.09.2013. 12:34 ] @
Možeš li da je premestiš u konstruktor i da je ogradiš sa !DesignMode (da bi sprečio da se to izvršava prilikom učitavanja u dizajneru)?

Pitam jer nisam siguran da li će ti to zabrljati izgled kontrole unutar dizajnera.
[ ghost2k3 @ 23.09.2013. 12:57 ] @
Mogu ja i u OnCreateControl() da je ogradim i nece pucati u dizajneru.

Moram da proverim da li nesto menja. Ali ubedjen sam da to i nije bitno za dizajner, nego samo aplikaciju, posto pamti podesavanja.