Laden...

UserControl Windows.Forms Verdeckte Bereiche

Erstellt von Haggy vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.321 Views
Haggy Themenstarter:in
1.134 Beiträge seit 2004
vor 15 Jahren
UserControl Windows.Forms Verdeckte Bereiche

Hi

ich habe ein kleines Problem.

Und zwar habe ich eine Form mit einem UserControl. Teile der Form und somit auch des UserControls werden (z.bsp. von dem MDiRoot) verdeckt. Sized sich nun der MDI Root und es wird mit von dem UserControl sichtbar sind teile des UserControls nicht richtig gezeichnet.
Nämlich fehlen teile die in dem Bereich die Vorher durch den MDIRoot nicht sichtbar waren.

Was ist denn das Adäquate Event hierfür ?

Momentan fange ich manuell im WndProc die Msg 133 WM_NCPAINT ab. dort zeichne ich diese Bereiche neu. damit klaptps schonmal. meine frage: Ist das das richtige vorgehen?

Hier unten noch ein beispiel wie das control von dem mdiroot (äußeres fenster) überlappt wird

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)

915 Beiträge seit 2006
vor 15 Jahren

Hrm, das kann leider viele Ursachen haben.

Ein paar Möglichkeiten die mir spontan einfallen:

  • OnPaint beim UserControl wird nicht angesprungen und die damit verbundene die Windows Nachricht WM_PAINT wird nicht an das UserControl gesendet wenn das MDIRoot sich vergrößert / verkleinert.

  • Die grafischen Objecte des UserControls richten sich an dem sichtbaren Bereich aus, was sehr wahrscheinlich ist da die Zeichenroutine sich automatisch der größe des sichtbaren Bereichs anpassen. Das passiert wenn man z.B. beim verändern der größe des Controls die Zeitleiste und deren Inhallte vergrößern / verkleinern will.

  • Die Form1 sendert WM_PAINT nicht an das UserControl weiter.

Ist das UserControl den von dir?

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

Haggy Themenstarter:in
1.134 Beiträge seit 2004
vor 15 Jahren

Meinen tests zufolge wird kein WMPaint geschickt. also auch nicht meine Paintmethode angeworfen. deswegen auch das manuelle abfangen der msg
hatte gehofft es gibt einen eleganteren weg 😕

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)

915 Beiträge seit 2006
vor 15 Jahren

Irgendwie habe ich das befürchtet - daher wäre das eleganteste wohl ein Invalidate() auf das USerControl oder die Form aufzurufen wenn sich der MDIRoot ändert, im Prinzip amchst du das ja schon.

Der Fehler liegt aber nicht bei dir, hatte da auch mal was dunkel in Erinnerung das es beim Maximieren, Minimieren und vergrößern von MDIContainer schwierigkeiten bei der WM_PAINT Windowsnachricht gab. Leider weis ich nicht mehr wie ich das gelöst habe, irgendwas elegantes viel mir da schon ein.Vielleicht erinnere ich mich wieder nach ner Flasche Rum 🙂

Ansonsten, bleib mal bei deiner Lösung, die klingt nichtmal so schlecht in diesem Fall.

Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Haggy,

kannst du vielleicht noch zwei weitere Screenshorts machen, so dass es insgesamt drei zusammenpassende Screenshots gibt:

  1. Vor dem Size
  2. Nach dem Size ohne Aktualisierung
  3. Nach dem Size mit Aktualisierung

herbivore

Haggy Themenstarter:in
1.134 Beiträge seit 2004
vor 15 Jahren

HI

also der MdiRoot ändert sich ja nichtinsofern bringt miri da das changed event nicht viel 🙂
der Root ird ja nur gesized aber ein binding auf den root mag ich nicht aufbauen.

@herbivore ok kann ich die tage mal machen und reinhängen :=

Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)