как набрать на этикетку? - PullRequest
1 голос
/ 13 февраля 2012

Я пытаюсь создать многострочное текстовое поле, чтобы при вводе оно передавало его на метку, НО метка должна иметь максимальную длину 15, поэтому, как только она достигнет 15 символов в текстовом поле, она должна начать перезаписыватьмаксимальная длина этикетки

, спасибо всем, кто может помочь

Ответы [ 4 ]

2 голосов
/ 13 февраля 2012

Добавить событие onchange в текстовое поле:

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

Например

1 голос
/ 13 февраля 2012

Я не уверен, какой вид перезаписи Вы хотите достичь.

Можно использовать как минимум три метода:

  • всегда отображаются последние 15 символов из текстового поля , как описано в ответе Оливье

  • очистка текста метки каждые 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;
    }
    
1 голос
/ 13 февраля 2012

Мое решение всегда отображает последние 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>.

1 голос
/ 13 февраля 2012

Добавить обработчик к событию TextChanged TextBox, который устанавливает содержимое 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);

Кроме того, хотя это не меняет ваш вопрос / ответ, вы можете захотеть использовать вместо него TextBlockLabel.Это позволяет такие вещи, как перенос строки.Посмотрите некоторые различия здесь: http://joshsmithonwpf.wordpress.com/2007/07/04/differences-between-label-and-textblock/ (хотя в WPF должно быть похоже на то, что вы делаете, хотя)

...