请问C#如何做到:让控件的坐标,随着窗体的大小变化而改变

玫_瑰骑_士 2013-10-01 04:42:28
设置Dock和Anchor之类的就不用说了。有没有什么比较好的方法?

比如在sizechange之前如果能记录下窗体的长和宽,再到sizechanged事件中获取一下改变之后的长和宽
利用这个比例去调整控件坐标就很方便了。

但是,关键问题是如何获取改变之前的窗体长和宽呢?
这个改变可能是窗体的最大化和还原到正常,也可能是用鼠标拖动窗体。

我看到很多在Form1_Load获取改变之前的长和宽,那么这样做的话,用鼠标拖动窗体的时候怎么办?
...全文
969 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
玫_瑰骑_士 2013-10-02
  • 打赏
  • 举报
回复
找到方法了,谢谢各位的提醒,其实没有我想得那么复杂:
//用来记录窗体的大小调整
        private double h1; 
        private double h2;
h1表示改变前的窗体Height, h2表示改变后的窗体Height。 Form构造函数里写:
//记录窗体的原始尺寸
            h1 = this.Height;
sizechanged事件里写:
h2 = this.Height;

            label1.Top = (int)((h2 / h1) * label1.Top);

            h1 = this.Height;
这样每次改变都覆盖了h1,也就不用总是去想改变之前窗体的Height是多少了
玫_瑰骑_士 2013-10-02
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
http://msdn.microsoft.com/zh-cn/library/ms229605(v=vs.90).aspx 在silverlight/wpf上也有类似的机制(只不过不是属性,而是一个容器控件)。 比如说我们针对13存的屏幕、1300多点的分辨率做的大屏幕界面,结果要在人家10寸小本上展示,就可以无需写任何代码、让其自动收缩,而所有的鼠标等指点操作的位置也会精确定位。 不过这不应该滥用。因为不论是放大还是缩小,往往给人操作时都带来更多困惑。或者觉得傻大的可笑,或者觉得琐细得根本无法操作。 最好的设计方式,是不改变控件大小,而是根据容易的大小自动布局。例如小屏幕上那么就自动将更多的内容收缩起来,而在大屏幕上那么就将更多内容自动平铺上去。
最好的设计方式,是不改变控件大小,而是根据容器的大小自动布局。这句话我觉得很有道理。 不过我现在的情况有点特殊,其实我是想做一个抽奖软件。 窗口上会有主标题,比如迎新晚会。会有副标题,比如承办单位。 正式抽奖的时候让窗口最大化全屏,这之类的字样也要智能地按比例改变自己的位置布局和大小。 除此之外,用鼠标拉动窗体改变大小的方式也希望字样的相对位置能够看起来比较舒服。 我现在正在想第一步如何按比例来改变字样的位置,如果可以抓获窗体大小改变前那一刹的大小, 再在sizechanged事件里获取改变之后的大小, 再根据两者之比计算出控件的位置应该就OK了, 现在就在想这个之前的大小获得起来好像有点困难。 或者说我应该换个思路?
玫_瑰骑_士 2013-10-02
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
Resize事件。
用Resize事件,虽然它在sizechanged事件之前发生,但貌似还是无法捕获改变前窗体的原始大小。 比如当我们用鼠标拉一下窗体,这前后的比例变化就可以用来调整控件的坐标,问题就是这个改变之前的大小不好知道。 如果在Form1_Load中记录下当前大小,用到比例中去的话,当用鼠标拉大窗体时这一比例就会失效。 或者说还可以用别的思路?
  • 打赏
  • 举报
回复
而是根据容易的大小自动布局 --> 而是根据容器的大小自动布局 找美工的经过深思熟虑和经验积累的思路来设计吧。不要用程序员应付差事时(以前没有想过这个问题,突然在系统上线时在用户面前“现眼”了,于是不打算花时间研究了)的那种想法。
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/ms229605(v=vs.90).aspx 在silverlight/wpf上也有类似的机制(只不过不是属性,而是一个容器控件)。 比如说我们针对13存的屏幕、1300多点的分辨率做的大屏幕界面,结果要在人家10寸小本上展示,就可以无需写任何代码、让其自动收缩,而所有的鼠标等指点操作的位置也会精确定位。 不过这不应该滥用。因为不论是放大还是缩小,往往给人操作时都带来更多困惑。或者觉得傻大的可笑,或者觉得琐细得根本无法操作。 最好的设计方式,是不改变控件大小,而是根据容易的大小自动布局。例如小屏幕上那么就自动将更多的内容收缩起来,而在大屏幕上那么就将更多内容自动平铺上去。
threenewbee 2013-10-01
  • 打赏
  • 举报
回复
Resize事件。
玫_瑰骑_士 2013-10-01
  • 打赏
  • 举报
回复
自顶~~~~~~~~~~~~~~~

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧