求WinForm下,窗体上的控件随窗体缩放而自动缩放的控件

gxingmin 2005-05-19 10:17:19
但是字体不缩放。
不要告诉我用控件的Dock和Anchor属性,当窗体控件特别多的时候,如果达到同时缩放以及位置相应改变,这两个属性设起来很麻烦,而且不一定能实现。

记得以前下载过这样的控件,现在忘了叫什么名字来了。

谢谢!
...全文
1330 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
okkk 2005-05-27
  • 打赏
  • 举报
回复
呵呵,关于位置,试试就知道了。
我上面说的就是这个问题,原来控件的大小如果不同,等比例放大缩小后,右下角对不齐了.
因为这里我们只关心了左上角的位置变化,和长与宽的变化.

就是说这里保证了左上角的比例,但右下角的比例不能保证,我想无论怎么样.按比例缩防后都有这个问题,只能看我们关注那里了.allchange函数中可以用一定的算法保证不同的对齐点,比如四个角,中心点等等.

要控制那些类型的控件不缩放在allchange函数的参数中需要传递gettype类型,然后width和height的变化随gettype值的不同而不同。
longqiaoman 2005-05-27
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/4006/4006132.xml?temp=.7047541
gxingmin 2005-05-27
  • 打赏
  • 举报
回复
okkk(see you) :
谢谢老兄,但是,不仅仅放大缩小这么简单吧,还有位置的变化,比方说:一行有多个文本框,后面的文本框除了改变大小外,还要改变位置;

还有:label控件我不想放大缩小,某些文本框高度不想放大缩小等等。

我记得原先我用的那个组件可以对每个控件设置不同的放大缩小方式,而且可以设置控件放大缩小不仅相对于窗体放大缩小,而且还可以根据周边其他控件进行放大缩小等。
但不知道那个控件去哪儿了,郁闷!
longqiaoman 2005-05-27
  • 打赏
  • 举报
回复
okkk(see you) :
确实如你所说,你的方法可以改变位置,加类型也可以处理,如果对控件里的控件再处理一下就好了(即控件里的控件也跟着缩放,如GroupBox里的Panel里的控件...)

也不是所有控件的位置都改变,如第一列的Label位置我不想改变,第一行的控件的Top值也不想改变等等


还有,通过类型过滤也不一定就能搞定的,有的TextBox只在宽度上缩放,有的TextBox在长宽上都可以缩放,而且不同的窗体,设置的控件都不一样,缩写写成汉数还不是最好的方法
longqiaoman 2005-05-27
  • 打赏
  • 举报
回复
okkk(see you) :
确实如你所说,你的方法可以改变位置,加类型也可以处理,如果对控件里的控件再处理一下就好了(即控件里的控件也跟着缩放,如GroupBox里的Panel里的控件...)

也不是所有控件的位置都改变,如第一列的Label位置我不想改变,第一行的控件的Top值也不想改变等等


还有,通过类型过滤也不一定就能搞定的,有的TextBox只在宽度上缩放,有的TextBox在长宽上都可以缩放,而且不同的窗体,设置的控件都不一样,缩写写成汉数还不是最好的方法
okkk 2005-05-26
  • 打赏
  • 举报
回复
我试了一下,能用,误差太大,各位找找原因阿!
okkk 2005-05-26
  • 打赏
  • 举报
回复
代码片断:
private void allchange(Control control,float wrate,float hrate)
{
int x = Convert.ToInt16(wrate*control.Bounds.X);
int y = Convert.ToInt16(hrate*control.Bounds.Y);
int height = Convert.ToInt16(hrate*control.Bounds.Height);
int width = Convert.ToInt16(wrate*control.Bounds.Width);
control.Bounds = new Rectangle(x,y,width,height);
}

private void Form1_SizeChanged(object sender, EventArgs e)
{
float wrate = this.Width/(float)width;
float hrate = this.Height/(float)height;
width = this.Width;
height = this.Height;
for (int i=0;i<this.Controls.Count;i++)
{
allchange(this.Controls[i],wrate,hrate);
}
}

需要保存当前窗口的大小:
在构造函数中:
width = this.Width;
height = this.Height;
okkk 2005-05-26
  • 打赏
  • 举报
回复
只能动态计算.
获得当前窗口变化比例,
一个以control为参数的函数,然后在contols集合中按比例计算.
LoveMango 2005-05-23
  • 打赏
  • 举报
回复
UP
huaren801007 2005-05-23
  • 打赏
  • 举报
回复
可以自定义控件来实现这个功能:动态计算获得控件的位置和大小
应该不是很难,增加一个方法就可以了吧
foolnet 2005-05-20
  • 打赏
  • 举报
回复
不知道
unique327 2005-05-20
  • 打赏
  • 举报
回复
路过,顶!
gxingmin 2005-05-20
  • 打赏
  • 举报
回复
自己再顶
gxingmin 2005-05-19
  • 打赏
  • 举报
回复
hw256(duck):
大哥,计算很麻烦吧,每个窗体布局都不一样,每个窗体都来计算一遍,会类似人的,而且以后维护起来删除或添加一个控件,这个算法又得改...

lingfeng0626(网络游侠):
mapInfo应该很大吧?
hw256 2005-05-19
  • 打赏
  • 举报
回复
1、通过程序设计来布局,而不是通过拖放来布局。
2、通过动态计算来获得控件的位置与大小。
3、为简便,可将窗体利用panel控件分成数行。然后计算每一行的控件的大小与位置。
Eweek 2005-05-19
  • 打赏
  • 举报
回复
wq_sc 2005-05-19
  • 打赏
  • 举报
回复
关注!
timiil 2005-05-19
  • 打赏
  • 举报
回复
Resize控件?
lingfeng0626 2005-05-19
  • 打赏
  • 举报
回复
MapInfo
mixiaobo 2005-05-19
  • 打赏
  • 举报
回复
学习
加载更多回复(1)

110,570

社区成员

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

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

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