Я использую элемент управления. Я добавил два Панели, поскольку я хотел бы нарисовать несколько панелей над элементом управления. i переопределил метод OnPaint() для этих двух панелей, но метод OnPaint() первой панели, добавленной в один только элемент управления, метод OnPaint() не вызвал вторую панель, которую я добавил в элемент управления.Метод OnPaint не вызван для дочерних элементов управления - WinForms
Примечание: Я использовал приведенный ниже код для перерисовки поверхности, чтобы избежать проблем с проблеском. Если я удалю приведенные ниже коды из моего примера, метод OnPaint() вызывается для второй панели, но элемент, нарисованный во второй панели, не находится в Visual. (т. е.) Не отображается.
SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.Selectable |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
Как достичь нескольких панелей, используя один элемент управления? Заранее спасибо.
Код:
public Class VContainer : Panel
{
public CPanel CPanel;
public SPanel SPanel;
public VContainer()
{
this.CPanel = new CPanel();
this.SPanel = new Spanel();
this.Controls.Add(Cpanel); **// first added Panel**
this.Controls.Add(SPanel);
}
protected override void OnMouseDown(MouseEventArgs e)
{
this.CPanel.Invalidate();
this.SPanel.Invalidate();
this.SPanel.Update();
}
}
public class CPanel : Panel
{
public CPanel()
{
// Used to redraw the surface to avoid flickering issues
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
}
**// OnPaint() called since Cpanel is added first to the VContainer**
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillRectangle(Brushes.Red, new Rect(0,0,50,50));
base.OnPaint(e);
}
}
public class SPanel : Panel
{
public SPanel()
{
// Used to redraw the surface to avoid flickering issues
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);
}
**// OnPaint() method is not called while invalidating the Panel since the Spanel is added as second control to VContainer**
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.FillRectangle(Brushes.Green, new Rect(0,0,50,50));
base.OnPaint(e);
}
}
Пожалуйста, покажите код OnPaint, а также показать код порога вы положите панель в другую. В противном случае помощь затруднена –
@EmmanuelDURIN - Я показал код, который я пробовал. –
Мне нужен ваш код, вы попробовали? –