首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#控制定位精度

c#控制定位精度
EN

Stack Overflow用户
提问于 2010-04-15 06:10:50
回答 4查看 2.2K关注 0票数 4

我需要更多的精度,而不是基于整数的位置时,将控件放在一个窗体上。control.location似乎只支持Point。有没有解决这个问题的办法?

Point p= new Point(100,200);this.Location = p;//当然可以

PointF pF =新的PointF(100.04f,200.08f);this.Location = pF;//这当然不起作用,因为位置需要的是点而不是PointF

基窗体或基控件上是否有一些设置,我可以将其设置为具有更高的定位精度?

EN

回答 4

Stack Overflow用户

发布于 2010-04-15 06:16:39

您可以结合使用Windows Presentation Foundation (WPF)和XAML (两者在Visual Studio中都能很好地工作),它允许控件的亚像素定位。

但是,假设您使用的是Windows窗体而不是WPF,为什么还要将控件放在非整数(子像素)位置上呢?

票数 4
EN

Stack Overflow用户

发布于 2010-04-15 06:18:02

不,WinForms中的控件渲染基本上都是基于像素的。有一种方法可以实现亚像素定位(不使用WPF),但这将是您的工作,我真的不确定为什么你会需要这个。

这种方法的要点是创建一个用户控件,其中包含一个隐藏的控件实例(可能是子像素的)。您连接所有用户控件的事件,以便它们传递到隐藏控件,并且在传递每个事件之后,您可以调用隐藏控件的DrawToBitmap方法来获取控件的快照。然后使用Graphics.DrawImage将快照复制到用户控件的图面上。DrawImage并不局限于像素,因此您可以将绘图偏移不到一个像素,以实现所需的精确定位。

警告:请不要这样做,因为当您可以只使用WPF时,没有理由这样做。这将是大量的工作,因为“传递控件的事件”并不像听起来那么简单。以这种方式正确呈现焦点也有一个问题,因为不可见的控件无法获得焦点(我甚至不会告诉您这个问题的可怕的黑客解决方案是什么)。

这是值得重新考虑的关于的决定-它对你正在做的事情来说是理想的,并会让你的生活变得更简单。我通常对WPF不感兴趣,因为我认为虽然它非常强大,但对于它最常用的用途(即无聊的商业应用程序)来说,它基本上是无能为力的。然而,在你的例子中,它提供了你的应用程序中实际需要的粒度。

但是,如果您坚持使用WinForms,那么最好的方法是编写您的应用程序所需的文本编辑控件的UserControl版本。从本质上讲,TextBox只是一个方块,您可以在其周围绘制边框和一些文本。此函数的.Net Graphics方法(DrawRectangleDrawString)可以具有以浮点形式指定的图形坐标。

关于所有者描述的用户控件和GDI+图形,有大量的StackOverflow问题。

票数 1
EN

Stack Overflow用户

发布于 2010-04-15 06:20:20

尽管GDI+能够使用浮点坐标系,但Win32 ( Winforms所基于的)不能。我再次推荐移动到WPF,它有一个基于设备无关虚拟像素的无处不在的浮点坐标系。

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

https://stackoverflow.com/questions/2641418

复制
相关文章

相似问题

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