Курсор C # / Каретка Не отображается при добавлении текста в Richtextbox

1

Я новичок в программировании, я делаю приложение С# для Windows Form, при выборе узла Tree он добавляет текст в Richtextbox:

Qs1: Для меня Caret не отображается после выбора узла дерева. Qs2: Сделать отображение как редактор, где, если слово начинается с//(Комментарий), должно быть зеленого цвета.

благодаря

 if (treeView1.SelectedNode.Name == "Node1")
        {  
          this.richTextBox1.SelectedText += "  my text for Node1" + Environment.NewLine
          richTextBox1.Focus();
        }
        else if (treeView1.SelectedNode.Name == "Node2")
        {
         this.richTextBox1.SelectedText += "  my text for Node2" + Environment.NewLine
          richTextBox1.Focus();
        }
Теги:
treeview
richtextbox

1 ответ

1
Лучший ответ

Вы задаете два вопроса, связанные с RichTextBox. Предпочтительная форма для StackOverflow - один вопрос на вопрос. Вероятно, вы получите больше ответов с более целенаправленными вопросами.

Что, как говорится:

  1. Согласно документации для метода Select:

    Текстовое поле должно иметь фокус, чтобы каретка была перемещена.

    Поэтому вам нужно сделать это первым.

    Кроме того, как правило, вы никогда не должны изменять ранее существовавший Text или SelectedText с += потому что это очистит все форматирование RTF на этом тексте. Вместо этого, чтобы вставить текст, вы должны установить выделение в нужное место, с нулевой длиной и вставить туда. Таким образом:

    public static void FocusAndAppendToSelectedText(this RichTextBox richTextBox, string text)
    {
        Action append = () =>
        {
            richTextBox.Focus();
    
            var start = richTextBox.SelectionStart;
            var length = richTextBox.SelectionLength;
            var insertAt = start + length;
    
            richTextBox.Select(insertAt, 0);
            richTextBox.SelectedText = text;
        };
    
        if (richTextBox.InvokeRequired)
            richTextBox.BeginInvoke(append);
        else
            append();
    }
    

    Кроме того, вы должны использовать \n а не Environment.Newline потому что последний в любом случае упростится до первого.

  2. Вопрос вроде "[Как сделать] Сделать отображение как редактор, где, если слово начинается с//(Комментарий) должно быть зеленого цвета" очень общее. Попытайтесь разбить его на отдельные проблемы и задавать вопросы тем, кого вы не можете понять сами. Чтобы начать работу, посмотрите здесь этот вопрос: выделите "#" до конца строки в richtextbox. Однако вы можете установить SelectionBackColor не SelectionColor, в зависимости от ваших точных требований пользовательского интерфейса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню