[C# ListBox] MeasureItem - nie wykonuje się

0

Witam

Mam formularz, umieściłem na niej kontrolkę ListBox i dodałem do niej kilka elementów (adresów pliku na dysku, jak np. C:\avatars\Rafał.jpg). Ustawiłem parametr DrawMode na OwnerDrawVariable.
Jeśli chodzi o samo rysowanie - (zdarzenie DrawItem) - nie ma wiekszych problemów, jeśli zaś dochodzi do MEasureItem - metoda w ogóle się nie wykonuje! (Mimo że wszystko jest zapisane jak powinno,
this.lbUserList.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.lbUserList_MeasureItem);
To żadna siła nie może zmusić programu do powiększenia elementów (obrazki są maleńkie, a na dysku - duże.).
Kod MeasureItem:

        private void lbUserList_MeasureItem(object sender, MeasureItemEventArgs e)
        {
            e.ItemHeight = Bitmap.FromFile(lbUserList.Items[e.Index].ToString()).Height;
        }

Najgorsze jest to, że w aplikacji którą napisałem dla sprawdzenia - wszystko śmiga.
Obecnie pisana przeze mnie aplikacja polega na tym, że mam okienko logowania, gdy tylko ktoś się zaloguje tworzy się kolejny form, (new MainForm(), a potem MainForm.Visible = true), na którym umieściłem tego przeklętego ListBoxa.
Może dlatego nie zachodzi MeasureItem?
Prosze o pomoc, dzieki z góry.

0

Odkryłem, że problem tkwi w tym, że tworze form, i gdy ten jeszcze nie był Visible, obiekty już są poddawane MeasureItem. Jak sie z tym uporać?

0

Teraz zupełnie nie wiem co zrobić.
Wiem już (szukałem tego baardzo długo), że kiedykolwiek położę na formę jakiegokolwiek WebBrowsera, to MeasureItem kontrolki ListBox przestaje działać (tzn e.ItemHeight nie jest przypisywany jakiejś liczbie. Metoda się wykonuje , bo widać MessageBox który dodałem do MeasureItem w celu debugowania).

0

Zrób tak:

        int wysokosc_itema = 0;

        private void lbUserList_MeasureItem(object sender, MeasureItemEventArgs e)
        {
            if(wysokosc_itema > 0)
               e.ItemHeight = wysokosc_itema;
        }

możesz w dowolnym momencie zmienić 'wysokosc_itema'.

Btw, do debugowania stawia się brake-pointy (F9 lub kliknij na szarym pionowym pasku obok kodu)

1 użytkowników online, w tym zalogowanych: 0, gości: 1