Выделите часть текста TextBox в .Net Windows Form - PullRequest
0 голосов
/ 16 апреля 2011

Требование

Я использую Vistual Studio 2005. Мне нужно текстовое поле, которое

  • Должен поддерживать японский язык. Пользователь должен иметь возможность вставлять японский текст в текстовое поле.
  • Текст в текстовом поле всегда должен быть Полужирный .
  • Текст после 100 символов должен выделяться желтым цветом, когда пользователь печатает.
  • Текстовое поле не должно разрешать какой-либо другой форматированный текст.

Решение, которое я пробовал

  1. Обычное текстовое поле с FontStyle, установленным на Полужирный .
    Issue : Я могу вставить японский текст, и текст всегда остается жирным. Единственная проблема - текстовое поле не поддерживает выделение текста как пользовательские типы.

  2. RichTextBox: выделение текста в обработчике событий TextChanged.

    handler = new System.EventHandler(richTextBox1_TextChanged);
    
    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        this.richTextBox1.TextChanged -= this.handler;
        int index = richTextBox1.SelectionStart;
    
        richTextBox1.Select(0, richTextBox1.Text.Length);
        richTextBox1.SelectionBackColor = Color.White;
        richTextBox1.SelectionLength = 0;
    
        if (richTextBox1.Text.Length > 100)
        {
            richTextBox1.Select(100, richTextBox1.Text.Length);
            richTextBox1.SelectionBackColor = Color.Yellow;
            richTextBox1.SelectionLength = 0;
        }
    
        richTextBox1.SelectionStart = index;
        this.richTextBox1.TextChanged += this.handler;
    }
    

    Highthing работает отлично. Но есть следующие проблемы .

    • Когда я копирую вставляемый японский текст в richtextbox, он отображается в виде полей Squre. Но если я назначаю тот же японский текст программно, он отображается правильно. Даже в обычном текстовом поле вставленный текст отображается правильно. Так что не уверен, в чем проблема с richtextbox.

    • Не удалось отключить форматирование richtextbox. например Если я скопирую HTML-текст с гиперссылками и вставлю в richtextbox, я увижу гиперссылки. И мое требование гласит, что форматирование, кроме BOLD, не допускается.

Я хочу получить эту функциональность, используя элементы управления форм Windows. Сторонний контроль будет моим последним вариантом.

Может кто-нибудь помочь?

Заранее спасибо!

~ Sambha

1 Ответ

0 голосов
/ 18 апреля 2011

У меня есть одно решение, но я не уверен, является ли это эффективным способом сделать это и вызовет ли это другие проблемы.

Решение : создание подкласса из RichTextBox и событие oDverride KeyDown. Проверьте, были ли нажаты клавиши Ctrol + V или Shift + Inst, вызовите метод вставки, используя DataFormats.UnicodeText.

class MyRichTextBox : RichTextBox
{

protected override void OnKeyDown(KeyEventArgs e)
{
    switch (e.KeyData)
    {
        case (Keys.Shift | Keys.Insert): 
        case (Keys.Control | Keys.V):

            this.Paste(DataFormats.GetFormat(DataFormats.UnicodeText));
            e.SuppressKeyPress = true;

            return;
    }

    base.OnKeyDown(e);
}

}
...