我有overrided到在屏幕上画出一个椭圆OnPaint方法。
protected override void OnPaint(PaintEventArgs e)
{
MessageBox.Show("Paint");
if (debugStarted)
{
int y = rtbLogicCode.PlaceToPoint(new Place(0, debugLine)).Y;
if (rtbLogicCode.GetVisibleState(debugLine).ToString() == "Visible")
{
e.Graphics.FillEllipse(new LinearGradientBrush(new Rectangle(0, y, 15, 15), Color.LightPink, Color.Red, 45), 0, y, 15, 15);
}
base.OnPaint(e);
}
}
private void rtbLogicCode_Scroll(object sender, ScrollEventArgs e)
{
this.Invalidate();
}
滚动事件(在RichTextBox中)得到妥善处理,但即使我无效的形式,它不调用的OnPaint函数(MessageBox中未显示)。
还有什么能这样做的可能的原因?
编辑:我忘了提,对孩子的形式(如添加使用MDI财产的主要形式的控制),我设置了以下样式的我的初始化函数:
private void LogicCodeInit()
{
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.UserPaint, true);
}
EDIT2:我也忘了提子窗体添加的TabControl的控制。 所述的TabControl然后加入为主要形式的控制。