C#编写的winform程序,
在台式机上可以正常显示,没有问题,界面如下:但是在笔记本上就显示不全,见下图:现在笔记本上显示用的滚动条,但是很不方便,想问有没有方法设置界面在不同尺寸的屏幕上自动按比例缩小或放大?谢谢。

解决方案 »

  1.   

    ->1.用布局控件进行布局:
    TableLayoutPanel:把区域划分成行和列,设置Anchor为Top|Bottom|Left|Right后,会随着窗口的大小自动调整单元格大小。
    FlowLayoutPanel:按照从左到右、从上到下的顺序排列子控件,设置Anchor后,会随着窗口大小变化重新布局。
    ->2.用控件的Anchor属性确定控件的定位方式,使控件可以与窗口某边界的位置固定或自动调整大小
    ->3.控件的Dock属性可以让子控件紧贴窗口边界或充满窗口。 
    设置界面在不同尺寸的屏幕上自动按比例缩小或放大
    -》换成WPF去布局界面,ViewBox控件完全足矣。
      

  2.   

    版主说的是慢的做法
    还有个快的:
    将本界面所有元素遍历,将他们的宽高上左四个属性 乘以 当前分辨率/设计分辨率 的结果即可,记得中间比值的结果要用double否则就看不见了。
      

  3.   


            private void setfrom(Control.ControlCollection IControls)
            {
                foreach (Control item in IControls)
                {
                    item.Top = (int)(item.Top * 0.8);
                    item.Left = (int)(item.Left * 0.8);
                    item.Width = (int)(item.Width * 0.8);
                    item.Height = (int)(item.Height * 0.8);
                    if (item.HasChildren)
                    {
                        setfrom(item.Controls);
                    }
                }
            }
    这是个缩小到80%的方法,你自己写参数做成缩小指定倍数的即可。
      

  4.   


    你好,你这种方法是不是以每个控件的中心来缩放?
    能不能设定将控件的左上角固定来缩放?
    能也不能。
    你自己根据控件逻辑位置和间隔来制作left就可以左上角实现了。
    但是我觉得你来问肯定就是不知道怎么制造这些控件的逻辑位置,那就简单点说吧:控件1|控件2
    例如他们的left分别是0,55。
    这时候物理位置就是 0和55,逻辑位置是0,控件1的宽度+两个控件的间距。
    如果你缩放的时候使用的是物理位置,当然看起来就是以空间的中心缩放,但是当你使用逻辑位置你就会发现这是按照 顶点(左上角)缩放的了。
    但是逻辑位置的制作这些还是需要一些时间的:
    1、理顺全部控件关系。
    2、控件在窗口初始化的时候直接使用逻辑位置*比例的方式指定四个参数。
      

  5.   


    你好,你这种方法是不是以每个控件的中心来缩放?
    能不能设定将控件的左上角固定来缩放?
    能也不能。
    你自己根据控件逻辑位置和间隔来制作left就可以左上角实现了。
    但是我觉得你来问肯定就是不知道怎么制造这些控件的逻辑位置,那就简单点说吧:控件1|控件2
    例如他们的left分别是0,55。
    这时候物理位置就是 0和55,逻辑位置是0,控件1的宽度+两个控件的间距。
    如果你缩放的时候使用的是物理位置,当然看起来就是以空间的中心缩放,但是当你使用逻辑位置你就会发现这是按照 顶点(左上角)缩放的了。
    但是逻辑位置的制作这些还是需要一些时间的:
    1、理顺全部控件关系。
    2、控件在窗口初始化的时候直接使用逻辑位置*比例的方式指定四个参数。
    位置好像只能重新指定了, 我是用基准的方法来做的. 如取左上角控件位置一定, 然后后面的控件位置 = ctrler_base.x+控件间间隔(*系数). 当然间隔也可以指定
      

  6.   


    你好,你这种方法是不是以每个控件的中心来缩放?
    能不能设定将控件的左上角固定来缩放?
    能也不能。
    你自己根据控件逻辑位置和间隔来制作left就可以左上角实现了。
    但是我觉得你来问肯定就是不知道怎么制造这些控件的逻辑位置,那就简单点说吧:控件1|控件2
    例如他们的left分别是0,55。
    这时候物理位置就是 0和55,逻辑位置是0,控件1的宽度+两个控件的间距。
    如果你缩放的时候使用的是物理位置,当然看起来就是以空间的中心缩放,但是当你使用逻辑位置你就会发现这是按照 顶点(左上角)缩放的了。
    但是逻辑位置的制作这些还是需要一些时间的:
    1、理顺全部控件关系。
    2、控件在窗口初始化的时候直接使用逻辑位置*比例的方式指定四个参数。
    位置好像只能重新指定了, 我是用基准的方法来做的. 如取左上角控件位置一定, 然后后面的控件位置 = ctrler_base.x+控件间间隔(*系数). 当然间隔也可以指定
    实际上你只要兼容几个分辨率就好了,就像游戏一样做几个分辨率的布局,然后用户设置分辨率这样开发速度要快一些。
      

  7.   

    先通过 Screen.FromControl(this) 获取屏幕大小
    再根据预置的尺寸做适当调整大多数情况下都是不需要调整到每个控件的,比如你示例的画面是并列的两个容器,你只要改变容器的宽度和右控件的起点就可以了,没必要改变容器内的控件的尺寸。
    虽然理论上并没有错误,但改变控件尺寸也要相应改变字体大小,弄不好会很难看的
      

  8.   

    分辨率不一样,你在画坐标轴的时候,XY轴上每个刻度长度如果固定,那分辨率不同,你绘制出来的XY轴刻度个数应该也不一样,不然你怎么调整都是显示不全的
    右边的是dock anchor的问题,改一下就好了
      

  9.   

    这个问题我之前也遇到过,你得知道一个问题,分辨率 DPI 等等,你看那个QQ 你如果调整了分辨率 或者是 DPI 他都会提示你是否也把QQ 设置成同样的DPI 。我觉得如果做的好的话,你也得这么考虑,就是通过DPI 去设计或者是去加载不同的布局和字体大小 。确实挺麻烦的 。希望能帮助到你 。
      

  10.   

    WinForm开发的话,Form的属性里面有一个borderStyle 好像是叫这个,改成Sizeable就好了吧 然后最大化窗口