如何让label自适应窗体大小?

渃水 2013-04-07 03:29:08
怎么样能实现这样的效果?
有好几个Label,里面的内容可以根据页面调整自动换行,应该是吧AutoSize设false,然后Anchor设置成top,right和left,这样可以实现遂改变换行,可是label的高度该怎样控制呢,使它可以适应,也不会挡住下面另外一个label!


两个图片说明题目意思,效果没有达到!

写了一小段测试实验了一下,始终不能成功!

private void Form1_Load(object sender, EventArgs e)
{
string sqlcon = "Data Source=PC20130329;Initial Catalog=Exam;Integrated Security=True";
SqlConnection con = new SqlConnection(sqlcon);

int x = this.ClientRectangle.Width;

string sql="select * from Question";
SqlCommand command = new SqlCommand(sql,con);

con.Open();
SqlDataReader dataReader = command.ExecuteReader();
dataReader.Read();
string ss = (string)dataReader["Question"];

Label ques = new Label();
ques.Parent = panel;
ques.Font = new Font("宋体", 14);
ques.Width = x;
ques.Height = 100;
ques.AutoSize = false;
ques.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right|AnchorStyles.Bottom;
ques.Location = new Point(0, 0);
ques.BorderStyle = BorderStyle.FixedSingle;
ques.Text = ss;

Label ques0 = new Label();
ques0.Parent = panel;
ques0.Width = x;
/*//////高度
int meihang=x/20;
int a = ss.Length;
int hang =( a % meihang == 0 ? (a / meihang) : ((a / meihang)+1));
ques0.Height = hang * 20;
*//////////
ques0.AutoSize = false;
ques0.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
int y = ques.Location.Y + ques.Size.Height + 20;
ques0.Location = new Point(0,180);
ques0.BorderStyle = BorderStyle.FixedSingle;
ques0.Text = ss;
ques0.Font = new Font("宋体", 14);

dataReader.Close();
con.Close();
con.Dispose();

}
...全文
1220 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
渃水 2013-04-07
  • 打赏
  • 举报
回复
引用 6 楼 assky124 的回复:
看错了,你是想一条一条紧挨着? label的Dock设置为Top,然后用Graphics的MeasureString,计算label的高度
能不能讲一下MeasureString的用法,看msdn不太懂,谢谢了!!!
assky124 2013-04-07
  • 打赏
  • 举报
回复
看错了,你是想一条一条紧挨着? label的Dock设置为Top,然后用Graphics的MeasureString,计算label的高度
assky124 2013-04-07
  • 打赏
  • 举报
回复
不想自己计算高度,就用TableLayout控件,谁用谁知道
渃水 2013-04-07
  • 打赏
  • 举报
回复
也就是说这些label高度自动调整,刚好到最后一行字符,而宽度随外面的窗体变化而变化!!
渃水 2013-04-07
  • 打赏
  • 举报
回复
引用 1 楼 songhtao 的回复:
把Label放到一个Panel里设置全屏,控制Panel的对齐方式
什么意思?能说的具体一些吗?使用一个panel,设置dock位fill吗?
vingsa8352 2013-04-07
  • 打赏
  • 举报
回复
在SizeChanged事件里面写吧,没试过
我不懂电脑 2013-04-07
  • 打赏
  • 举报
回复
把Label放到一个Panel里设置全屏,控制Panel的对齐方式
资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在Windows Forms(WinForm)开发中,用户界面的自适应性是提升应用程序用户体验的关键。自适应设计让应用在不同尺寸的屏幕上显得整洁、专业且易于使用。本文将探讨如何实现WinForm窗体及其控件的自适应,以及C#编程语言在其中的作用。 窗体自适应的基本原理是,当窗口大小变化时,窗体内的控件能自动调整位置和大小,保持布局合理。在C#中,可通过事件处理程序监听窗体的Resize事件,并在此事件中进行计算和调整。 “统计原始窗体的位置和大小”是关键步骤。在窗体加载时,应记录下窗体的初始位置和大小,可通过设置变量或使用Form.Load事件完成。例如: 接下来,处理Form.Resize事件。在此事件中,根据新旧窗体尺寸计算缩放比例,并应用到每个控件上。可使用递归方法遍历窗体的所有子控件,包括嵌套的容器控件,如Panel或GroupBox。示例代码如下: 在上述代码中,ScaleControls函数遍历所有子控件,根据缩放比例调整位置和大小。这样,无论窗体如何缩放,控件都会按原比例自适应调整。 对于特定类型的控件,如Label或PictureBox,可能还需额外处理字体大小和图片尺寸的变化。例如,对于Label控件,可增加一行代码调整字体大小

111,111

社区成员

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

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

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