页面布局大体如下所示:Label1   TextBox1       Label2    TextBox2要怎么设置Label或者TextBox的属性,让TextBox的大小随着窗体的变化而变化,同时Label标题始终不会被遮盖,并随着TextBox的变化而变化呢
貌似是很简单就能把它设置好,但是我试了好多次都弄不好。
要在Resize事件里写代码不成。
求各路大神帮忙分析下,万分感谢。

解决方案 »

  1.   

    如果lable和textbox个数不多还好,如果多那就放弃吧。。
      

  2.   

    使用silverlight或者wpf
    设置缩放率
    在不同分辨率下调整控件坐标
    窗体加载resize时改变坐标 
      

  3.   

    项目前期框架啥的估算的差不多了,猛地一换wpf或者silverlight不太现实,看看能不能写个通用点的方法resize事件重新计算下坐标吧。
    原来这个问题并没有想象中的那么容易解决啊 
      

  4.   

    你试试控件的Anchor(锚定)属性能不能达到你要的效果?
      

  5.   

    用Anchor属性,上下左右全部选上
      

  6.   

    楼主的这种情况将这4个控件的Anchor值都设为 AnchorStyles.Top | AnchorStyles.Left
    | AnchorStyles.Right ,如果 TextBox2 的右边没有控件的话, 
    窗体大小改变后也只是TextBox2的大小会发生变化,其它的控件大小不会变化。
    要想TextBox1的大小也发生变化,那就只能重写Resize事件
      

  7.   

    根据工作区或是 windows.Screen.Width  和 height 等属性来调整
      

  8.   

    嗯,是,我晓得了,试过,但是还是达不到俺的预想效果。
    首先是textbox2右边还有2对label+textbox 
    其次 textbox2变大了 textbox1 不便 明显的 界面美观就下去了
    估计只能重写Resize事件了
      

  9.   

    可以用TableLayoutPanel来做: public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent(); var table = new TableLayoutPanel()
    {
    Width = this.Width,
    Anchor = AnchorStyles.Left | AnchorStyles.Right,
    ColumnCount = 4,
    ColumnStyles =
    {
    new ColumnStyle(SizeType.AutoSize),
    new ColumnStyle(SizeType.Percent, 50F),
    new ColumnStyle(SizeType.AutoSize),
    new ColumnStyle(SizeType.Percent, 50F),
    },
    }; var label1 = new Label { Text = "short label", AutoSize = true };
    var label2 = new Label { Text = "long label xxxxxxxxxxxxxxxxxxxxxxxx", AutoSize = true };
    var textbox1 = new TextBox { Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top };
    var textbox2 = new TextBox { Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top }; table.Controls.Add(label1, 0, 0);
    table.Controls.Add(textbox1, 1, 0);
    table.Controls.Add(label2, 2, 0);
    table.Controls.Add(textbox2, 3, 0);
    this.Controls.Add(table);
    }
    }
      

  10.   

    或者Dev中有什么控件可以解决这个问题么。
      

  11.   

    控件倒是可以根据窗体的大小改变大小,但是那样并不好看,如过你把分辨率调高的话,每个控件扩大好几倍,肯定不是你想要的效果。就用Anchor,别设置控件的anchor,把需要的控件放到panel中,设置panel的Anchor
      

  12.   


    就是有个显示全显示不全的问题,我电脑分辨率是1440*900 我可以按照这个分辨率设置最佳显示效果,等到分辨率一发生变化,有可能好多控件就显示不出来了。
    当然一些大控件整个就占全部x坐标的直接设置Dock属性就可以了,
    问题还是label和Text组合做表单。这个表单 要达到最佳的显示效果,真愁了我好几天了,
    想如果真重写Resize事件,就权衡效率和视觉感受这两方面选那个了。
      

  13.   

    不行你就做一个最小分辨率的,1024*768.然后如果调整分辨率的话,设置大的控件的Anchor,像lable,textbox小控件在一行的,就放到容器控件里,设置容器的Anchor
      

  14.   

    问题解决,用TableLayoutPanel控件布局