Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
UserControl Windows.Forms Verdeckte Bereiche
Haggy
myCSharp.de - Member

Avatar #avatar-2608.png


Dabei seit:
Beiträge: 1.134
Herkunft: Karlsruhe

Themenstarter:

UserControl Windows.Forms Verdeckte Bereiche

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Haggy am .
Attachments
Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)
private Nachricht | Beiträge des Benutzers
Andreas.May
myCSharp.de - Member

Avatar #avatar-2474.gif


Dabei seit:
Beiträge: 915

beantworten | zitieren | melden

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(
private Nachricht | Beiträge des Benutzers
Haggy
myCSharp.de - Member

Avatar #avatar-2608.png


Dabei seit:
Beiträge: 1.134
Herkunft: Karlsruhe

Themenstarter:

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
Andreas.May
myCSharp.de - Member

Avatar #avatar-2474.gif


Dabei seit:
Beiträge: 915

beantworten | zitieren | melden

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(
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Haggy
myCSharp.de - Member

Avatar #avatar-2608.png


Dabei seit:
Beiträge: 1.134
Herkunft: Karlsruhe

Themenstarter:

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers