u013934865
皂皂丶
采纳率50%
2017-05-12 08:55 阅读 1.7k

C# WinForm重写控件之后,显示的时候会先显示重写之前的控件 然后再变成重写之后的。。。

10

C# WinForm重写控件之后,显示的时候会先显示重写之前的控件 然后再变成重写之后的。。。 比如:我把一个picturebox继承重写成圆形的了,但是加载的时候会先加载成正方形, 然后再是圆形 ;还有 我把窗体在构造函数里面重绘成三角形之后还是如此 先闪一下原来的长方形窗体 ,然后变成我重绘的三角形的。试了很多大概都会闪一下,时间在半秒到一秒左右,很明显。
请问各位大佬 这要如何解决??

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    maguoze 马国泽 2017-05-15 04:14

    如果是闪烁的话,需要屏蔽系统的WM_ERASEBKGND消息
    protected override void WndProc(ref Message m)
    {
    switch (m.Msg)
    {
    case 0x0014:
    m.Result = IntPtr.Zero;
    break;
    default:
    base.WndProc(ref m);
    break;
    }
    }

    点赞 1 评论 复制链接分享
  • devmiao devmiao 2017-05-12 16:30

    是不是你写了
    base.OnPaint()在前面

    点赞 1 评论 复制链接分享
  • maguoze 马国泽 2017-05-15 04:16

    一般重写OnPaint函数来画自己的界面,都需要屏蔽WM_ERASEBKGND消息。这个消息是系统用来画背景的

    点赞 评论 复制链接分享

相关推荐