Ich habe ein Multiple TableLayoutPanels
auf MDI-Formulare. Jedes Tabellenlayout verfügt über mehrere Steuerelemente (einschließlich ObjectListView) und nur die oberste Einstellung ist auf sichtbar gesetzt.Schwarzer Hintergrund und Artefakte auf ObjectListView, wenn Formular Fokus erhält
Ich implementierte die Lösung wie in dieser SO answer angegeben und es funktioniert hervorragend, wenn Sie ein Formular zum ersten Mal öffnen, da kein Flimmern auf den untergeordneten Steuerelementen des Layouts während der Größenänderung ist.
Ich habe auch:
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
foreach (CoTableLayoutPanel tlp in this.Controls)
{
if (tlp != null)
{
tlp.BeginUpdate();
tlp.Size = firstLayout.Size;
tlp.EndUpdate();
}
}
}
ich die oben tun, so dass, wenn ich Layouts innerhalb des Formulars wechseln alle sind sie schon die richtige Größe und vermeide ich flackernde weiter, während die Größenänderung. Das funktioniert auch gut.
Wenn ich jedoch ein ObjectListView
Steuerelement auf diesem abgeleiteten Tabellenlayout habe, und ich zwischen den Formen wechseln, wird das Steuerelement teilweise gezeichnet (vor allem der Rahmen), ein schwarzer Hintergrund wird schnell angezeigt und auch die letzte Spalte wird jedes Mal neu skaliert (Spalte FillsFreeSpace
Eigentum).
Wenn ich den Standard TableLayoutPanel
verwende, verhält sich das Listensteuerelement wie erwartet, dh. keine Artefakte, kein schwarzer Hintergrund, keine Spaltengröße. Allerdings bekomme ich das flackern zurück, wenn ich das Formular öffne.
Die ObjectListView
hat Eigenschaften wie Invalidate
und Refresh
, und ich habe versucht, diese auf der OnGotFocus
Methode des Formulars aufzurufen. Das Problem besteht immer noch.
Ist dies ein Problem der ObjectListView
oder kann ich das Problem aus dem abgeleiteten Tabellenlayout beheben?
EDIT
Das Problem mit dieser Methode verursacht wird:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= WS_EX_COMPOSITED;
return cp;
}
}
diese Methode kommentiert geführte Maßnahmen werden die ObjectListView
Arbeit wie erwartet, aber die flackernden kehrt machen.
Eine Umgehung der oben genannten Methode?
Vielen Dank für die Erklärung. –