C# winform Label控件 已经自适应实现多行显示了 我现在要取出每行的文本 该怎么做? 求助! 多谢!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winform Label控件 已经自适应实现多行显示了 我现在要取出每行的文本 该怎么做? 求助! 多谢!相关的知识,希望对你有一定的参考价值。

注意 我不是怎么多行显示 我是问怎么取出一个已经多行显示的Label的每行文本!

获取控件最大宽度(你设置的)

根据字体从第一个文字起计算宽度,一个一个累加 如果超出最大宽度或出现换行符则该文字放弃累加并换行 (这时就知道了当前行的内容),依此方式推出每一行
注意事项:当最大宽度不足一个文字时每行按一个文字计算(不分中英文)追问

从第一个文字起计算宽度,一个一个累加
怎么算 这涉及到一个单位转换问题吧亲

追答

int maxWidth=label1.MaximumSize.Width;
Graphics g = label1.CreateGraphics();
string msg = label1.Text;//要计算的文字
List msgs = new List();//存放结果
int rowIdx=0;
for (int i = 0; i maxWidth)

if (i - rowIdx == 0)
//宽度不足一个文字
msgs.Add(msg.Substring(rowIdx, 1));
rowIdx = i + 1;

else
//一般情况
msgs.Add(msg.Substring(rowIdx, i - rowIdx));
rowIdx = i;


else if (size.Width == maxWidth)
//总宽度刚好合适,此情况出现可能性及小
msgs.Add(msg.Substring(rowIdx, i - rowIdx+1));
rowIdx = i+1;


if (rowIdx < msg.Length)
//最后一行不足总宽度的
msgs.Add(msg.Substring(rowIdx));

参考技术A 这得看你Label1肿么实现的多行显示吧。如果是是通过回车换的行,那就下面代码,这样每行元素就显示出来了。如果是换行实现的,那就把\n换成\r
string s1 = label1.Text;
string[] bytes = s1.Split('\n');
string s2 = bytes[0];
foreach (string s in bytes)

MessageBox.Show(s);
追问

我是autosize=true 设置了maxsize 这么换行的

试了 不行 这么换行的label.text既没有\n也没有\r

c# winform开发,textbox控件问题

如下图,如果在自己的程序里出现这样的输入框效果,带三个小点的按钮,我查了百度,似乎只有自己写用户控件才能,vs2008自带的控件不能有这样的效果么?

用户控件:

  1.创建用户控件

 2. 在用户控件上拖放一个label,一个textbox,一个按钮

      并设置控件的属性如下:

      label:设置lable的width:260,height:1   backcolor为黑色,这样label就变成了一条黑色下划线

      textbox:设置boderstyle的属性为none

      button:设置按钮的image为一张搜索图片

  3.主要代码:

 public partial class UCLineTextBox : UserControl

   

        public UCLineTextBox()

       

            InitializeComponent();

       


        [Category("自定义"),Description("显示文本内容")]

        public override string Text

       

            get

           

                return tb.Text;

           

            set

           

                tb.Text = value;

           


       


        public delegate void ButtonClick();

        public event ButtonClick ButtonSelectClick;


        private void tb_Enter(object sender, EventArgs e)

       

            //当鼠标进入文本框的时候,按钮可见

            btn.Visible = true;

       


        private void tb_Leave(object sender, EventArgs e)

       

            //当鼠标离开文本框的时候,按钮消失

            btn.Visible = false;

       


        private void UCLineTextBox_Load(object sender, EventArgs e)

       

            btn.Visible = false;

       


        private void btn_Click(object sender, EventArgs e)

       

            try

           

                ButtonSelectClick.DynamicInvoke(null);

           

            catch (Exception)

           

                

                return;

           

       

    

4.编译该控件,然后在工具箱中就可以看到此控件,然后把该控件托到界面上,就可以看到效果了。

你也可以使用Gdi+集成TextBox手绘,但相对来说比较麻烦

参考技术A 自带的控件中没有这样的效果控件 参考技术B 不能 只有自己写~

以上是关于C# winform Label控件 已经自适应实现多行显示了 我现在要取出每行的文本 该怎么做? 求助! 多谢!的主要内容,如果未能解决你的问题,请参考以下文章

c# winform 制作自定义控件

C#如何使winform程序自适应屏幕分辨率显示

c#怎样在winform窗体中自动生成label1控件,比如有姓名,性别,年龄三个字段就自动生成三个label来显示

C# WinForm 用户控件的自定义事件问题

c#(winform)怎么修改多个控件的一个共有属性?

C# winform 控件大小布局适应窗口放大缩小?