TX_*_*TX_ 6 .net c# drawing winforms
我想我在这里缺少一些微不足道的东西.我直接从中导出了简单的控件Control.我正在覆盖OnPaint并绘制矩形(e.Graphics.DrawRectangle)和其中的文本(e.Graphics.DrawString).我没有覆盖任何其他成员.
当控件调整到较小的尺寸时,它会很好地自我绘制,但是当它被调整到更大的尺寸时,新区域不会被正确重新绘制.一旦我再次将其调整为较小的尺寸,即使按一个像素,一切都正确重新绘制.
OnPaint被正确调用(正确PaintEventArgs.ClipRectangle设置到新区域),但无论如何都不会绘制新区域(出现工件).
我错过了什么?
编辑:
码:
protected override void OnPaint(PaintEventArgs e)
{
// Adjust control's height based on current width, to fit current text:
base.Height = _GetFittingHeight(e.Graphics, base.Width);
// Draw frame (if available):
if (FrameThickness != 0)
{
e.Graphics.DrawRectangle(new Pen(FrameColor, FrameThickness),
FrameThickness / 2, FrameThickness / 2, base.Width - FrameThickness, base.Height - FrameThickness);
}
// Draw string:
e.Graphics.DrawString(base.Text, base.Font, new SolidBrush(base.ForeColor), new RectangleF(0, 0, base.Width, base.Height));
}
private int _GetFittingHeight(Graphics graphics, int width)
{
return (int)Math.Ceiling(graphics.MeasureString(base.Text, base.Font, width).Height);
}
Run Code Online (Sandbox Code Playgroud)

Lar*_*ech 11
尝试在构造函数中添加:
public MyControl() {
this.ResizeRedraw = true;
this.DoubleBuffered = true;
}
Run Code Online (Sandbox Code Playgroud)
并在您的绘画事件中,清除上一张图:
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.Clear(SystemColors.Control);
// yada-yada-yada
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3150 次 |
| 最近记录: |