如何键入标签

本文关键字:标签 何键入 | 更新日期: 2023-09-27 18:24:14

我正在尝试一个多行文本框,当你输入它时,它会流式传输到标签,但标签的最大长度必须为15,所以一旦它在文本框中达到15个字符,它就应该开始覆盖标签,因为它达到了的最大长度

感谢任何能够帮助的人

如何键入标签

在文本框中添加onchange事件:

if (textBox1.Text.Length<=15)  
{  
    label1.Caption=textBox1.Text;  
}

例如

我不确定您想要实现什么样的覆盖。

至少有三种方法可以使用:

  • 始终显示文本框中的最后15个字符,如Olivier的回答中所述

  • 清除标签的文本,每插入15个字符并重新开始填充标签,您可以使用此代码来实现这一点:

    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        String text = textBox1.Text.Replace("'r'n", "|");
        int startIndex = ((text.Length - 1) / 15) * 15;
        label1.Text = text.Substring(Math.Max(0, startIndex));
    }
    
  • 当文本长度超过15个字符时,您也可以逐字符覆盖,但是,我认为这不是您想要实现的,因为这会导致文本框混乱;),然而,它可以作为一种视觉效果:)。如果您想要此代码片段,请告诉我:)。更新下面是第三种重写方法的代码:

    String lastText = "";
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        String textBoxText = textBox1.Text.Replace("'r'n", "|");
        if (textBoxText.Length > lastText.Length)
        {
            int charIndex = (textBoxText.Length - 1) % 15;
            if (charIndex >= 0)
            {
                label1.Text = label1.Text.Insert(charIndex, textBoxText.Substring(textBoxText.Length - 1));
                if (charIndex < textBoxText.Length - 1)
                {
                    label1.Text = label1.Text.Remove(charIndex + 1, 1);
                }
            }
        }
        else
        {
            int charIndex = textBoxText.Length % 15;
            if (textBoxText.Length >= 15)
            {
                label1.Text = label1.Text.Insert(charIndex, textBoxText[textBoxText.Length - 15].ToString());
                if (charIndex < textBoxText.Length - 1)
                {
                    label1.Text = label1.Text.Remove(charIndex + 1, 1);
                }
            }
            else
            {
                label1.Text = label1.Text.Remove(label1.Text.Length - 1, 1);
            }
        }
        lastText = textBoxText;
    }
    

TextBoxTextChanged事件添加一个处理程序,该处理程序根据文本设置Label的内容。例如(未经测试,可能有你的概念错误或在某个地方偏离了一个)

int startIndex = Math.Max(0, myTextBox.Text.Length - 15);
int endIndex = Math.Min(myTextBox.Text.Length - 1, startIndex);
myLabel.Text = myTextBox.Text.Substring(startIndex, endIndex - startIndex);

此外,尽管它不会改变您的问题/答案,但您可能希望使用TextBlock而不是Label。它允许诸如换行之类的操作。请在此处查看一些差异:http://joshsmithonwpf.wordpress.com/2007/07/04/differences-between-label-and-textblock/(在WPF中,无论你在做什么,都应该类似)

我的解决方案总是显示标签中的最后15个字符

private void textBox1_TextChanged(object sender, EventArgs e)
{
    string s = textBox1.Text.Replace("'r'n", "|");
    int length = s.Length;
    if (length > 15) {
        label1.Text = s.Substring(length - 15);
    } else {
        label1.Text = s;
    }
}

我还将换行符替换为|。由于您的文本框处于多行模式,因此在按下<Enter>时会输入换行符。