首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Dock不为None的情况下调整用户控件大小后,绘图不起作用

在Dock不为None的情况下调整用户控件大小后,绘图不起作用
EN

Stack Overflow用户
提问于 2018-01-14 18:52:44
回答 1查看 61关注 0票数 0

我有一个非常简单的代码来在我的用户控件上绘制网格(在调用基类OnBackgroundPaint之后):

代码语言:javascript
复制
private void DrawGrid(Graphics g)
        {
            Pen p = new Pen(new HatchBrush(HatchStyle.LargeGrid | HatchStyle.Percent50, Color.LightGray, Color.Transparent), 1);

            for (int i = 0; i < this.Size.Width; i+=50)
            {
                g.DrawLine(p, new Point(i, this.Location.Y), new Point(i, this.Size.Height));
            }

            for (int i = 0; i < this.Size.Height; i += 50)
            {
                g.DrawLine(p, new Point(this.Location.X,i), new Point(this.Size.Width, i));
            }
            p.Dispose();
        }

当我将这个控件放在主窗体上并且不使用停靠时,它可以很好地调整大小。但是,当我将Dock属性设置为None以外的任何值时,在调整大小后,绘制的区域将被擦除,并且再也不会绘制。可能的原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-14 20:03:14

这是因为在创建用户控件时,您必须从0,0位置开始,并且您想要在其上进行操作,则必须从0,0左上角位置开始,而不是在父级上重新分配用户控件

代码语言:javascript
复制
private void DrawGrid(Graphics g)
    {
        Pen p = new Pen(new HatchBrush(HatchStyle.LargeGrid | HatchStyle.Percent50, Color.LightGray, Color.Transparent), 1);

        for (int i = 0; i < this.Size.Width; i+=50)
        {
            g.DrawLine(p, new Point(i, **0**), new Point(i, this.Size.Height));
        }

        for (int i = 0; i < this.Size.Height; i += 50)
        {
            g.DrawLine(p, new Point(**0**,i), new Point(this.Size.Width, i));
        }
        p.Dispose();
    }

此外,您还必须在控件构造函数中调用此函数:

代码语言:javascript
复制
this.SetStyle(ControlStyles.DoubleBuffer | 
    ControlStyles.UserPaint | 
    ControlStyles.AllPaintingInWmPaint,
    true);
this.UpdateStyles();

对用户控件绘图的调用tell在缓冲区中执行,完成后,结果将输出到屏幕上。双缓冲可防止因重绘控件而导致的闪烁。如果将DoubleBuffer设置为true,则还应将UserPaint和AllPaintingInWmPaint设置为true。如果为false,则不引发Paint事件。此样式仅适用于从Control派生的类。并且该控件忽略窗口消息WM_ERASEBKGND以减少闪烁。仅当UserPaint位设置为true时,才应应用此样式。

有关更多信息,您可以查看此链接:

https://msdn.microsoft.com/en-us/library/system.windows.forms.controlstyles(v=vs.110).aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48248833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档