2013-05-05 12 views
5

Mam formularz, który wychowuję za pomocą ShowDialog, który zawiera kilka pól tekstowych, etykiet i przycisku. Problem polega na tym, że pola tekstowe są rysowane przed samym formularzem, a pozostałe formanty są rysowane.Kontrolki nie są rysowane w tym samym czasie

Jestem przesłanianie metody OnPaint Nie jestem pewien, czy to może być przyczyną problemu:

protected override void OnPaint(PaintEventArgs e) 
{ 
    ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.Black, ButtonBorderStyle.Solid); 
    base.OnPaint(e); 
} 

to tylko niewielkie opóźnienie, ale jest to widoczne i denerwujące. Dziękuję Ci.

Formularz jest podwójnie buforowany przy okazji.

EDYTOWANIE: Zidentyfikowaliśmy problem jako fakt, że formularz nie ma numeru FormBorderStyle. W przypadku zestawu FormBorderStyle ustawionego na Sizable ten problem nie występuje. Należy jednak pamiętać, że posiadanie FormBorderStyle.None jako mojego stylu granicznego jest konieczne, więc nie znalazłem jeszcze rozwiązania.

+1

można dodawać wszystkie istotne kodu odnoszące się do rysunku z etykiety, pola tekstowe i przyciski? – JosephGarrone

+0

W rzeczywistości element nadrzędny wywołuje metodę renderowania każdego elementu podrzędnego przed wykonaniem samego renderowania. To jest domyślne zachowanie. Może być wyświetlane okno dialogowe po zakończeniu ładowania formularza. – Saravanan

+0

Wszystkie elementy sterujące zostały dodane za pomocą projektanta Visual Studio, więc nie dotknąłem rysunku tych elementów sterujących. –

Odpowiedz

1

warto dodać to do dialogowym formie pudełkowej:

protected override CreateParams CreateParams 
    { 
     get 
     { 
      // Activate double buffering at the form level. All child controls will be double buffered as well. 

      CreateParams cp = base.CreateParams; 

      cp.ExStyle |= 0x02000000; // WS_EX_COMPOSITED 

      return cp; 
     } 
    } 
+0

To działało dzięki! –

Powiązane problemy