Winforms: 把Label显示为多行

问题描述:

我们经常用Label在对话框上显示提示信息。当需要提示的信息很长时,我们却发现Label不想TextBox那样具有Multiline这样的属性。在一个Textbox中,如果把Multiline属性设为true,该TextBox就能够显示多行文本。遗憾的是,Label并没有这样的属性。因此当我们试图用Label去显示很长的信息的时候,发现不能晚上。

问题重现:

1.       修建一个Winforms项目

2.       Form1上添加一个LabelButton

3.       button1添加Click事件,其事件处理器代码为:

private void button1_Click(object sender, EventArgs e)

{

    label1.Text = "Long Text Test: In this test, we will try to set a very long text the label1.";

}

4.       编译运行。点击button1,我们发现Label显示的文字被部分截断了。如下图所示:

 

解决办法:

如果我们添加一个TableLayoutPanel,并把Labe作为其子控件。那么Winforms在计算Label的布局(Layout)的时候,发现单行无法全部显示时,就会自动把它显示为多行。

1.       新建一个Winforms项目

2.       Form1上添加一个TableLayoutPanel。删掉最后一列,并修改属性如下:

//

// tableLayoutPanel1

//

this.tableLayoutPanel1.ColumnCount = 1;

this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));

this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);

this.tableLayoutPanel1.Controls.Add(this.button1, 0, 1);

this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;

this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);

this.tableLayoutPanel1.Name = "tableLayoutPanel1";

this.tableLayoutPanel1.RowCount = 2;

this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());

this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());

this.tableLayoutPanel1.Size = new System.Drawing.Size(284, 84);

this.tableLayoutPanel1.TabIndex = 4;

3.       TableLayoutPanel中的第一行添加一个Label,在第二行添加一个Button。属性和button1Click事件和前面一样

4.       编译并运行。点击button1,我们发现此时label1里的文字显示正确。如下图所示:

         我们注意到,label1不但被显示为多行,而且Winforms自动根据label1的实际宽度,调整了button1的位置。这正是WinformsLayout功能强大的地方。

         这里提高的功能,对于开发多语言软件非常有用。在多语言环境下,同一个Label显示的文本可能是不一样的。Label能够完全显示一种语言,但当被翻译成另一种语言时,就一定能完全显示了。因此我们需要利用TableLayoutPanel来自动调节Label以及相邻空间的大小,以确保对话框的布局是正确的。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值