用VS2005 C# WINFORM写了个应用程序,在1024X768下设计的,界面正好,显示完好,但是把程序在800X600下就显示不全,用户无法操作,而如果在比1024X768更高的分辨率下显示就会有很多空的地方,显示也不友好    问:如何才能使界面在不用分辨率下而保持原来的界面效果呢,谢谢!

解决方案 »

  1.   

    使用控件的Dock属性来布局就可以了。
      

  2.   

    运用groupbox 设置DOCK后.
    如果控件不是很多的话.就可以用代码,以groupbox的大小来确定位置.
      

  3.   

    Dock比较麻烦,之前有试过,不太好处理
    在网上找了一个方法,可是我也试了好像也不行,代码如下:
    定义变量如下 
    private   List <double>   dPresentW   =   new   List <double> (); 
    private   List <double>   dPresentH   =   new   List <double> (); 
    private   List <double>   dPresentT   =   new   List <double> (); 
    private   List <double>   dPresentL   =   new   List <double> (); 
    补充构造函数,例如: 
    public   Form1() 

          InitializeComponent();       foreach   (Control   ctl   in   this.Controls) 
          { 
           dPresentW.Add((double)ctl.Width   /   (double)Width); 
           dPresentH.Add((double)ctl.Height   /   (double)Height); 
           dPresentT.Add((double)ctl.Top   /   (double)Height); 
           dPresentL.Add((double)ctl.Left   /   (double)Height); 
          } 
    } 然后写ReSize事件 
    private   void   Form1_Resize(object   sender,   EventArgs   e) 

        int   iCount   =   Controls.Count; 
        for   (int   i   =   0;   i   <   iCount;   i++) 
        { 
           Controls[i].Left   =   (int)(Width   *   dPresentL[i]); 
           Controls[i].Top   =   (int)(Height   *   dPresentT[i]); 
           Controls[i].Width   =   (int)(Width   *   dPresentW[i]); 
           Controls[i].Height   =   (int)(Height   *   dPresentH[i]); 
         } 
    }大家有没有什么更好的方法呀
      

  4.   

    那就以最小的分辨率来设计界面,然后用Dock之类的动态调整。这个问题其实也困扰我很久了!不过大多数控件还是可以做到动态调整的!不过组合起来后,缩小了弄就不好自动调整了!
      

  5.   

    可以用Dock布局,也可以获得屏幕的大小(分辨率)来调整。
    int w = Screen.PrimaryScreen.Bounds.Width;
    int h = Screen.PrimaryScreen.Bounds.Height;
      

  6.   

    是呀,整个项目去改成DOCK比较麻烦,最好是系统开启就去对整个项目去实现。
      

  7.   

    dock很好用的,你可以搭配着vx2005里的contianersplitter(好像叫这个)用
      

  8.   

            private void Form1_Load(object sender, EventArgs e)
            {
                Rectangle rect = Screen.GetWorkingArea(this);
                this.Top = 0;
                this.Left = 0;
                this.Width = rect.Width;
                this.Height = rect.Height;
            }
      

  9.   

    养成习惯 用GroupBox或者Panel吧窗口进行划分
    然后在GroupBox或者Panel里面来添加其他控件
    这样可以简单通过GroupBox或者Panel的Dock属性来调整窗口布局
      

  10.   

    控件按比例随窗体缩放
    Public Class Form1    Dim x As Single = 0
        Dim y As Single = 0
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '得到原始窗体大小
            x = Me.Width
            y = Me.Height
            setTag(Me)
        End Sub    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
            '得到现在窗体的大小,然后根据原始大小计算缩放比例
            Dim newx As Single = Me.Width / x
            Dim newy As Single = Me.Height / y
            setControls(newx, newy, Me)
        End Sub
        '递归取控件的原始大小和位置,用tag来纪录
        Private Sub setTag(ByVal obj As Object)
            For Each con As Control In obj.Controls
                con.Tag = con.Width & ":" & con.Height & ":" & con.Left & ":" & con.Top & ":" & con.Font.Size
                '如果是容器控件,则递归继续纪录
                If con.Controls.Count > 0 Then
                    setTag(con)
                End If
            Next
        End Sub
        '递归重新设定控件的大小和位置
        Private Sub setControls(ByVal newx As Single, ByVal newy As Single, ByVal obj As Object)
            For Each con As Control In obj.Controls
                con.AutoSize = False
                Dim mytag() As String = con.Tag.ToString.Split(":")
                con.Width = mytag(0) * newx
                con.Height = mytag(1) * newy
                con.Left = mytag(2) * newx
                con.Top = mytag(3) * newy
                '计算字体缩放比例,缩放字体
                Dim currentSize As Single = newy * mytag(4)
                con.Font = New Font(con.Font.Name, currentSize, _
                    con.Font.Style, con.Font.Unit)
                '如果是容器控件,则递归继续缩放
                If con.Controls.Count > 0 Then
                    setControls(newx, newy, con)
                End If
            Next
        End Sub
    End Class
      

  11.   

    我也建议使用Dock和Anchor,比自己调整控件尺寸方便很多把。
    同时还要规定一个最小窗口尺寸Form.MinimumSize = new Size(640,480);
      

  12.   

    public void Position(int width, int height)
            {
                this.Location = new Point(width * this.width  / 1280, height * this.height / 720);
                this.Size = new Size(width * this.width  / 1280, height * this.height/ 720);
            }--------------
    int width;
    int height; 是当前分辨率的 x,y
    1280  720为你改变前的x,y
      

  13.   

    还有没有人有其它的意见和方法呀只要是做WINFORM程序都会遇到这样的问题
      

  14.   

    Dock和Anchor综合使用,就可以了。
      

  15.   

    我就是用这种方法
    而且不光控件大小要变,里面字体的大小也要跟着变,改起来烦的很
    不知道,用DOCK的话,字体能不能变呢?
      

  16.   

    dock和anchor一般可以处理窗体大小变化时,窗体上控件的位置。
    一般窗体大小不会随系统分辨率调整,常用的1024*768(17纯平)、1280*1024(17液晶)和宽屏(1280*768),这个一般会根据客户需求来确定分辨率,在进行开发。
      

  17.   

    dock和anchor一般可以处理窗体大小变化时,窗体上控件的位置。
    一般窗体大小不会随系统分辨率调整,常用的1024*768(17纯平)、1280*1024(17液晶)和宽屏(1280*768),这个一般会根据客户需求来确定分辨率,在进行开发。
      

  18.   

    dock和anchor一般可以处理窗体大小变化时,窗体上控件的位置。
    一般窗体大小不会随系统分辨率调整,常用的1024*768(17纯平)、1280*1024(17液晶)和宽屏(1280*768),这个一般会根据客户需求来确定分辨率,在进行开发。
      

  19.   

    我也想知道 怎么解决,不是都要在下面放panl吧,这样不是很麻烦
      

  20.   

    这个问题要很简单方便的达到最好的实现效果的确不容易,容器和相关属性,以前用的时候也是感觉很麻烦,不过我一般是开始设计UI的时候就考虑好这些因素了,最好是有所限制。调试的时候最大和最小分辨率都看看。你看下Microsoft Office Outlook,最小的时候能挤成一团,可是一般情况下用户都不会去怎么做,多思考,多总结,慢慢就知道怎么决定和处理了吧^_^
      

  21.   

    dock和anchor,单个控制的时候还可以用。多个控件的时候 dock和anchor 很不好用。