WinForms幻像边框

时间:2017-01-23 09:29:26

标签: vb.net winforms visual-studio-2015

我在工作中有一个应用程序,用VS2008用VB.Net winforms编写。它最近更新到VS2015;但是,一些幻像边框已经开始出现在UI上。大多数控件/ UI都是自定义控件,但希望这里的某些人可能知道为什么这些在2015年构建之后现在出现了。(我在2008年编译了相同的代码,并且边框不在那里)。

下面的屏幕截图显示了“幻影边框”。

UI Phantom Borders

可能很难看到,但文字左侧的浅灰色线条是“幻影边框”。虽然在这种情况下这看起来不是一个主要问题,但是在整个用户界面上情况要差得多,其他所有控件都做同样的事情。

希望有人有一些想法,因为我是新鲜的!

我试过 - 禁用控件中的所有边框,启用然后禁用(以确保没有缓存状态)。检查用户控件上的所有属性,以确保我没有遗漏属性。

1 个答案:

答案 0 :(得分:0)

典型。提出问题,然后出现答案!

问题是由于" OnPaintBackground"在基本用户控件中重写的方法。

似乎Windows 10 / vs2015(不确定该等式中的哪个元素)改变了它进行像素计算的方式。

基础控件将获得其背后的表单的背景图像,以进行手册"透明度"对于用户控件,尺寸在宽度和/或高度上将是1像素太小。

之前的代码(创建幻像边框):

Dim srcRec As Rectangle = Bounds
srcRec.Offset(backgroundSource.Origin)
e.Graphics.DrawImage(backgroundSource.BackgroundImage, 0, 0, srcRec, GraphicsUnit.Pixel)

如您所见,它抓取控件的大小,然后获取背后的背景部分,并将该图像绘制为自己的背景。

更正后的代码(摆脱了幻影边框):

Dim srcRec As Rectangle = Bounds
srcRec.Width +=1 
srcRec.Height +=1
srcRec.Offset(backgroundSource.Origin)
e.Graphics.DrawImage(backgroundSource.BackgroundImage, -1, -1, srcRec, GraphicsUnit.Pixel)

这似乎可以解决问题,隐藏幻像边框并正确呈现UI。

感谢任何至少看过这个问题的人!很难从我无法分享的代码库中总结问题。希望这可以在将来帮助其他人。