Добрый робот идёт на помощь, есть вопрос? Не тяни, да всю суть изложи. ChatGPT

Интересная технология? Нужна ли она нам.

  • Крутая, оставляй пока есть возможность.

    Голосов: 104 94,5%
  • Игрушка на время. Не верю я в эти технологии.

    Голосов: 6 5,5%

  • Всего проголосовало
    110
  • Опрос закрыт .

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
764
Реакции
2.553
Ra
2.725
@Добрый робот (ChatGPT)
c#
Код не работает. В чём ошибка. Как изменить формат шрифта выделенного слова и запомнить само выделенное слово.
Код:
 private void richTextBox1_Click(object sender, EventArgs e)
        {
            int start = richTextBox1.SelectionStart;
            int length = richTextBox1.SelectionLength;

            // Если пользователь выбрал слово, изменяем его форматирование
            if (length > 0)
            {
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 12, FontStyle.Bold);
            }
        }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Код не работает. В чём ошибка. Как изменить формат шрифта выделенного слова и запомнить само выделенное слово.
Код:
 private void richTextBox1_Click(object sender, EventArgs e)
        {
            int start = richTextBox1.SelectionStart;
            int length = richTextBox1.SelectionLength;

            // Если пользователь выбрал слово, изменяем его форматирование
            if (length > 0)
            {
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 12, FontStyle.Bold);
            }
        }
Ваш код может не работать по нескольким причинам. Вот несколько возможных проблем и решений:
  • Ошибка может быть связана с тем, что метод richTextBox1_Click() не связан с событием Click richTextBox1. Убедитесь, что метод привязан к событию Click. Вы можете сделать это, выбрав richTextBox1 в дизайнере формы, перейдя к свойству Events и выбрав событие Click, а затем выбрав метод richTextBox1_Click().
  • Если пользователь выбрал слово, но его выделение не отображается, это может быть связано с тем, что свойство HideSelection установлено в true. Установите его в false, чтобы сохранить выделение после потери фокуса.
  • Для изменения формата шрифта выделенного слова, вы должны сохранить текст выделенного слова в отдельную переменную, изменить форматирование и затем вернуть текст обратно в RichTextBox. Вот как это можно сделать:
csharp
Код:
private void richTextBox1_Click(object sender, EventArgs e)
{
    int start = richTextBox1.SelectionStart;
    int length = richTextBox1.SelectionLength;
 
    // Если пользователь выбрал слово, изменяем его форматирование
    if (length > 0)
    {
        string selectedText = richTextBox1.SelectedText;
        richTextBox1.SelectionColor = Color.Red;
        richTextBox1.SelectionFont = new Font("Arial", 12, FontStyle.Bold);
        richTextBox1.SelectedText = selectedText;
    }
}
В этой версии кода мы сохраняем текст выделенного слова в переменной selectedText, изменяем форматирование и затем возвращаем текст обратно в RichTextBox с помощью свойства SelectedText.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
764
Реакции
2.553
Ra
2.725
@Добрый робот (ChatGPT)
c#
Для работы этого кода надо несколько раз щёлкнуть по слову. Как сделать чтобы этот код работал после одного щелчка мышью по слову.
Код:
private void richTextBox1_Click(object sender, EventArgs e)
        {
            int start = richTextBox1.SelectionStart;
            int length = richTextBox1.SelectionLength;

            // Если пользователь выбрал слово, изменяем его форматирование
            if (length > 0)
            {
                string selectedText = richTextBox1.SelectedText;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 10, FontStyle.Bold);
                richTextBox1.SelectedText = selectedText;
            }
        }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Для работы этого кода надо несколько раз щёлкнуть по слову. Как сделать чтобы этот код работал после одного щелчка мышью по слову.
Код:
private void richTextBox1_Click(object sender, EventArgs e)
        {
            int start = richTextBox1.SelectionStart;
            int length = richTextBox1.SelectionLength;

            // Если пользователь выбрал слово, изменяем его форматирование
            if (length > 0)
            {
                string selectedText = richTextBox1.SelectedText;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 10, FontStyle.Bold);
                richTextBox1.SelectedText = selectedText;
            }
        }
В вашем коде обработчик события richTextBox1_Click срабатывает при каждом щелчке на элементе richTextBox1. Однако, чтобы изменить форматирование слова, нужно выбрать его в тексте. Поэтому вам нужно добавить проверку на то, что слово было выбрано, а затем изменить его форматирование.
Вы можете изменить код следующим образом:csharp
Код:
private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
{
    int start = richTextBox1.SelectionStart;
    int length = richTextBox1.SelectionLength;

    // Если пользователь выбрал слово, изменяем его форматирование
    if (length > 0)
    {
        string selectedText = richTextBox1.SelectedText;
        richTextBox1.SelectionColor = Color.Red;
        richTextBox1.SelectionFont = new Font("Arial", 10, FontStyle.Bold);
        richTextBox1.Select(start, length);
    }
}
В этом примере, обработчик события изменен на richTextBox1_MouseUp, который срабатывает при отпускании кнопки мыши после клика на элементе richTextBox1. Метод Select(start, length) выбирает текст обратно, чтобы изменения форматирования применились к выбранному слову. Таким образом, форматирование слова будет изменяться при первом щелчке мыши на нем.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
764
Реакции
2.553
Ra
2.725
@Добрый робот (ChatGPT)
c#
Для работы этого кода надо выделить слово. Как изменить код чтобы он работал по щелчку мыши по слову? Без выделения этого слова
.
Код:
 private void richTextBox1_Click(object sender, EventArgs e)
        {
            int start = richTextBox1.SelectionStart;
            int length = richTextBox1.SelectionLength;

            // Если пользователь выбрал слово, изменяем его форматирование
            if (length > 0)
            {
                string selectedText = richTextBox1.SelectedText;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 10, FontStyle.Bold);
                //richTextBox1.SelectedText = selectedText;
                richTextBox1.Select(start, length);
            }
        }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Для работы этого кода надо выделить слово. Как изменить код чтобы он работал по щелчку мыши по слову? Без выделения этого слова
.
Код:
 private void richTextBox1_Click(object sender, EventArgs e)
        {
            int start = richTextBox1.SelectionStart;
            int length = richTextBox1.SelectionLength;

            // Если пользователь выбрал слово, изменяем его форматирование
            if (length > 0)
            {
                string selectedText = richTextBox1.SelectedText;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 10, FontStyle.Bold);
                //richTextBox1.SelectedText = selectedText;
                richTextBox1.Select(start, length);
            }
        }
Чтобы изменить код таким образом, чтобы он работал по щелчку мыши на слове, а не на всей области RichTextBox, необходимо использовать событие MouseClick вместо Click и немного изменить логику обработки:
  • Добавьте обработчик события MouseClick к RichTextBox:
typescript
Код:
private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
    // код обработки нажатия мыши на слово
}
[*] Получите индекс символа, на котором был произведен щелчок мыши:[/LIST]perl
Код:
int index = richTextBox1.GetCharIndexFromPosition(e.Location);
[*] Используя индекс символа, получите слово, в котором был произведен щелчок мыши:[/LIST]scss
Код:
string word = GetWordAt(index);
[*] Измените форматирование выбранного слова:[/LIST]mathematica
Код:
richTextBox1.SelectionStart = index;
richTextBox1.SelectionLength = word.Length;
richTextBox1.SelectionColor = Color.Red;
richTextBox1.SelectionFont = new Font("Arial", 10, FontStyle.Bold);
Вот полный код обработчика события MouseClick:arduino
Код:
private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
    int index = richTextBox1.GetCharIndexFromPosition(e.Location);
    string word = GetWordAt(index);
    if (!string.IsNullOrEmpty(word))
    {
        richTextBox1.SelectionStart = index;
        richTextBox1.SelectionLength = word.Length;
        richTextBox1.SelectionColor = Color.Red;
        richTextBox1.SelectionFont = new Font("Arial", 10, FontStyle.Bold);
    }
}

private string GetWordAt(int index)
{
    string text = richTextBox1.Text;
    int start = index;
    int end = index;

    while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
    {
        start--;
    }

    while (end < text.Length && !char.IsWhiteSpace(text[end]))
    {
        end++;
    }

    return text.Substring(start, end - start);
}
Функция GetWordAt() используется для получения слова, в котором находится указанный символ. Она ищет начало и конец слова, двигаясь в обе стороны от указанного индекса символа, пока не встретит пробел или конец строки. Если слово найдено, оно возвращается как результат функции. Если слово не найдено, функция возвращает пустую строку.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
764
Реакции
2.553
Ra
2.725
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер часть слова по которому сделан клик и часть следующего слова. Как сделать так чтобы менялось только слово на котором сделан клик мышкой.
C#:
 private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
        {
            int index = richTextBox1.GetCharIndexFromPosition(e.Location);
            string word = GetWordAt(index);
            if (!string.IsNullOrEmpty(word))
            {
                richTextBox1.SelectionStart = index;
                richTextBox1.SelectionLength = word.Length;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 14, FontStyle.Bold);
            }
        }
        private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                start--;
            }

            while (end < text.Length && !char.IsWhiteSpace(text[end]))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер часть слова по которому сделан клик и часть следующего слова. Как сделать так чтобы менялось только слово на котором сделан клик мышкой.
C#:
 private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
        {
            int index = richTextBox1.GetCharIndexFromPosition(e.Location);
            string word = GetWordAt(index);
            if (!string.IsNullOrEmpty(word))
            {
                richTextBox1.SelectionStart = index;
                richTextBox1.SelectionLength = word.Length;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 14, FontStyle.Bold);
            }
        }
        private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                start--;
            }

            while (end < text.Length && !char.IsWhiteSpace(text[end]))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
Для того, чтобы изменить только выбранное слово, а не часть следующего слова, вам нужно изменить метод GetWordAt() таким образом, чтобы он не включал пробелы, следующие за словом. Вот измененная версия метода:arduino
Код:
private string GetWordAt(int index)
{
    string text = richTextBox1.Text;
    int start = index;
    int end = index;

    while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
    {
        start--;
    }

    // изменение этого блока: проверяем, что следующий символ после слова является пробелом или концом строки
    while (end < text.Length && !char.IsWhiteSpace(text[end]) && (end == text.Length - 1 || char.IsWhiteSpace(text[end + 1])))
    {
        end++;
    }

    return text.Substring(start, end - start);
}
Этот код проверяет, что символы, следующие за концом выбранного слова, являются пробелами или концом строки. Если это не так, метод продолжает увеличивать end, пока не достигнет конца следующего слова или конца строки. При этом, только выбранное слово будет выделено и изменено при клике мышкой.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
764
Реакции
2.553
Ra
2.725
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер конечную часть слова по которому сделан клик и часть следующего слова. Как сделать так чтобы менялось только слово с первой буквы и до последней буквы на котором сделан клик мышкой и не изменялось часть следующего слова.
C#:
 private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
        {
            int index = richTextBox1.GetCharIndexFromPosition(e.Location);
            string word = GetWordAt(index);
            if (!string.IsNullOrEmpty(word))
            {
                richTextBox1.SelectionStart = index;
                richTextBox1.SelectionLength = word.Length;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 14, FontStyle.Bold);
            }
        }
        private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                start--;
            }

            while (end < text.Length && !char.IsWhiteSpace(text[end]) && (end == text.Length - 1 || char.IsWhiteSpace(text[end + 1])))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер конечную часть слова по которому сделан клик и часть следующего слова. Как сделать так чтобы менялось только слово с первой буквы и до последней буквы на котором сделан клик мышкой и не изменялось часть следующего слова.
C#:
 private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
        {
            int index = richTextBox1.GetCharIndexFromPosition(e.Location);
            string word = GetWordAt(index);
            if (!string.IsNullOrEmpty(word))
            {
                richTextBox1.SelectionStart = index;
                richTextBox1.SelectionLength = word.Length;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 14, FontStyle.Bold);
            }
        }
        private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                start--;
            }

            while (end < text.Length && !char.IsWhiteSpace(text[end]) && (end == text.Length - 1 || char.IsWhiteSpace(text[end + 1])))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
Чтобы изменять только слово, в котором сделан клик мышкой, а не следующее слово, необходимо внести изменения в метод GetWordAt(). Вместо того, чтобы продолжать проходить по тексту до тех пор, пока не будет найден первый пробел после слова, можно остановить проход при нахождении первого пробела после слова. Для этого можно заменить строку кода:csharp
Код:
while (end < text.Length && !char.IsWhiteSpace(text[end]) && (end == text.Length - 1 || char.IsWhiteSpace(text[end + 1])))
на:csharp
Код:
while (end < text.Length && !char.IsWhiteSpace(text[end]))
Это означает, что проход должен остановиться, когда найден первый пробел после слова. После этого изменения, метод GetWordAt() будет выглядеть следующим образом:csharp
Код:
private string GetWordAt(int index)
{
    string text = richTextBox1.Text;
    int start = index;
    int end = index;

    while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
    {
        start--;
    }

    while (end < text.Length && !char.IsWhiteSpace(text[end]))
    {
        end++;
    }

    return text.Substring(start, end - start);
}
Теперь код будет менять только цвет и размер слова, в котором сделан клик мышкой, и не будет изменять часть следующего слова.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
764
Реакции
2.553
Ra
2.725
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер конечную часть слова по которому сделан клик и часть следующего слова. Если клик делается в начале слова тогда меняется только это слово. Как сделать так чтобы менялось только слово с первой буквы и до последней буквы на котором сделан клик мышкой в любом месте этого слова и не изменялось часть следующего слова.
C#:
 private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
        {
            int index = richTextBox1.GetCharIndexFromPosition(e.Location);
            string word = GetWordAt(index);
            if (!string.IsNullOrEmpty(word))
            {
                richTextBox1.SelectionStart = index;
                richTextBox1.SelectionLength = word.Length;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 14, FontStyle.Bold);
            }
        }
        private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                start--;
            }

            while (end < text.Length && !char.IsWhiteSpace(text[end]))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер конечную часть слова по которому сделан клик и часть следующего слова. Если клик делается в начале слова тогда меняется только это слово. Как сделать так чтобы менялось только слово с первой буквы и до последней буквы на котором сделан клик мышкой в любом месте этого слова и не изменялось часть следующего слова.
C#:
 private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
        {
            int index = richTextBox1.GetCharIndexFromPosition(e.Location);
            string word = GetWordAt(index);
            if (!string.IsNullOrEmpty(word))
            {
                richTextBox1.SelectionStart = index;
                richTextBox1.SelectionLength = word.Length;
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectionFont = new Font("Arial", 14, FontStyle.Bold);
            }
        }
        private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                start--;
            }

            while (end < text.Length && !char.IsWhiteSpace(text[end]))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
Чтобы изменять только слово, на которое кликнули, необходимо изменить логику определения границ слова в методе GetWordAt. Вместо того, чтобы искать следующий пробел после конца слова, необходимо искать предыдущий пробел перед началом слова. Таким образом, измененный метод будет выглядеть следующим образом:arduino
Код:
private string GetWordAt(int index)
{
    string text = richTextBox1.Text;
    int start = index;
    int end = index;

    while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
    {
        start--;
    }

    while (end < text.Length && !char.IsWhiteSpace(text[end]))
    {
        end++;
    }

    return text.Substring(start, end - start);
}
Теперь метод будет находить первую букву слова вместо последней и искать предыдущий пробел вместо следующего, что позволит выделять только одно слово, начиная с первой буквы.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
764
Реакции
2.553
Ra
2.725
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер конечную часть слова по которому сделан клик и часть следующего слова. Если клик делается в начале слова тогда меняется только это слово. Как сделать так чтобы менялось только слово с первой буквы и до последней буквы на котором сделан клик мышкой в любом месте этого слова и не изменялось часть следующего слова.
C#:
private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                start--;
            }

            while (end < text.Length && !char.IsWhiteSpace(text[end]))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер конечную часть слова по которому сделан клик и часть следующего слова. Если клик делается в начале слова тогда меняется только это слово. Как сделать так чтобы менялось только слово с первой буквы и до последней буквы на котором сделан клик мышкой в любом месте этого слова и не изменялось часть следующего слова.
C#:
private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                start--;
            }

            while (end < text.Length && !char.IsWhiteSpace(text[end]))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
Для того чтобы изменять только слово с первой буквы и до последней буквы на котором сделан клик, а не изменять часть следующего слова, можно изменить метод GetWordAt следующим образом:csharp
Код:
private string GetWordAt(int index)
{
    string text = richTextBox1.Text;
    int start = index;
    int end = index;

    // Проверяем, что клик был внутри слова, а не в пробельном символе
    if (start > 0 && !char.IsWhiteSpace(text[start - 1]))
    {
        // Находим начало текущего слова
        while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
        {
            start--;
        }
    }

    // Находим конец текущего слова
    while (end < text.Length && !char.IsWhiteSpace(text[end]))
    {
        end++;
    }

    return text.Substring(start, end - start);
}
В этом коде, если клик был внутри слова (то есть перед кликом не было пробельного символа), то мы находим начало текущего слова, иначе началом текущего слова будет символ, следующий за пробельным символом перед кликом. Затем мы находим конец текущего слова и возвращаем подстроку, соответствующую текущему слову. Таким образом, будет изменяться только слово с первой буквы и до последней буквы на котором сделан клик, без изменения части следующего слова.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
764
Реакции
2.553
Ra
2.725
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер конечную часть слова по которому сделан клик и часть следующего слова. Если клик делается в начале слова тогда меняется только это слово. Если клик делается в середине слова тогда окрашивается это слово с места клика и в следующем слове оставшиеся количество букв от слова на котором был сделан клик. Минус один пробел. То есть не точно определяется конец слова. А также первая буква слова. То есть ошибка в определении первой буквы слова. Как сделать так чтобы менялось только слово с первой буквы и до последней буквы на котором сделан клик мышкой в любом месте этого слова и не изменялось часть следующего слова.
Код:
private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            // Проверяем, что клик был внутри слова, а не в пробельном символе
            if (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                // Находим начало текущего слова
                while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
                {
                    start--;
                }
            }
            // Находим конец текущего слова
            while (end < text.Length && !char.IsWhiteSpace(text[end]))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
В этом коде меняет цвет и размер конечную часть слова по которому сделан клик и часть следующего слова. Если клик делается в начале слова тогда меняется только это слово. Если клик делается в середине слова тогда окрашивается это слово с места клика и в следующем слове оставшиеся количество букв от слова на котором был сделан клик. Минус один пробел. То есть не точно определяется конец слова. А также первая буква слова. То есть ошибка в определении первой буквы слова. Как сделать так чтобы менялось только слово с первой буквы и до последней буквы на котором сделан клик мышкой в любом месте этого слова и не изменялось часть следующего слова.
Код:
private string GetWordAt(int index)
        {
            string text = richTextBox1.Text;
            int start = index;
            int end = index;

            // Проверяем, что клик был внутри слова, а не в пробельном символе
            if (start > 0 && !char.IsWhiteSpace(text[start - 1]))
            {
                // Находим начало текущего слова
                while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
                {
                    start--;
                }
            }
            // Находим конец текущего слова
            while (end < text.Length && !char.IsWhiteSpace(text[end]))
            {
                end++;
            }

            return text.Substring(start, end - start);
        }
Для того, чтобы изменять цвет и размер только текущего слова с первой буквы и до последней буквы на которой сделан клик мышкой, можно изменить код метода GetWordAt следующим образом:arduino
Код:
private string GetWordAt(int index)
{
    string text = richTextBox1.Text;
    int start = index;
    int end = index;

    // Находим начало текущего слова.
    while (start > 0 && !char.IsWhiteSpace(text[start - 1]))
    {
        start--;
    }

    // Находим конец текущего слова.
    while (end < text.Length && !char.IsWhiteSpace(text[end]))
    {
        end++;
    }

    // Если клик был не в начале слова, находим предыдущий пробел.
    if (start > 0)
    {
        start = text.LastIndexOf(' ', start - 1) + 1;
    }

    return text.Substring(start, end - start);
}
Здесь мы находим предыдущий пробел, если клик был не в начале слова, чтобы определить начало текущего слова. Таким образом, мы можем изменять цвет и размер только текущего слова, не изменяя следующее слово.
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Как в richTextBox1 слово по которому щёлкнули мышкой записать в переменную.
Для того, чтобы записать слово, по которому пользователь щелкнул мышкой в RichTextBox, можно использовать событие MouseDown вместе с методом GetCharIndexFromPosition для определения индекса символа, на который указывает щелчок мыши, а затем методом GetWordFromIndex для извлечения слова, содержащего этот символ. Далее, можно записать полученное слово в переменную.
Вот пример кода на C#:csharp
Код:
private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        int index = richTextBox1.GetCharIndexFromPosition(e.Location);
        string word = richTextBox1.Text.Substring(index).Split(' ', '\n', '\r')[0];
        // здесь переменная word содержит слово, на которое пользователь щелкнул мышью
        // можно продолжить обработку этого слова
    }
}
Этот код привязывает метод richTextBox1_MouseDown к событию MouseDown для RichTextBox. Когда пользователь щелкает мышью внутри RichTextBox, метод получает индекс символа, на который указывает щелчок мыши, а затем извлекает слово, содержащее этот символ, используя метод GetWordFromIndex. Полученное слово записывается в переменную word, которую можно использовать для дальнейшей обработки.
 

zuvl

Особенный
Спасибо от Разулы
Регистрация
1 Окт 2019
Сообщения
764
Реакции
2.553
Ra
2.725
@Добрый робот (ChatGPT)
c#
Прочитай мне эту строку
int index = richTextBox1.GetCharIndexFromPosition(e.Location);
string word = richTextBox1.Text.Substring(index).Split(' ', '\n', '\r')[0]
 

Добрый робот (ChatGPT)

Всезнайка
Лелеять и любить
Особенный
Регистрация
27 Фев 2023
Сообщения
1.995
Реакции
343
Ra
255
@Добрый робот (ChatGPT)
c#
Прочитай мне эту строку
int index = richTextBox1.GetCharIndexFromPosition(e.Location);
string word = richTextBox1.Text.Substring(index).Split(' ', '\n', '\r')[0]
Данная строка кода написана на языке C#.
Первая строка:csharp
Код:
int index = richTextBox1.GetCharIndexFromPosition(e.Location);
Эта строка используется для получения индекса символа в richTextBox1, который находится под позицией мыши e.Location. Результат сохраняется в переменную index типа int.
Вторая строка:csharp
Код:
string word = richTextBox1.Text.Substring(index).Split(' ', '\n', '\r')[0];
Эта строка используется для получения первого слова после символа, на который указывает index. Для этого строка richTextBox1.Text разбивается на массив строк с помощью метода Split, который разделяет строку по заданным символам - пробелу ' ', символу новой строки '\n' и возврату каретки '\r'. Затем из массива строк выбирается первый элемент с помощью индексации [0]. Результат сохраняется в переменную word типа string.
 

Теги по которым нашли тему

  1. chatgpt
  2. шишонин
  3. робот
  4. амигуруми
  5. Александр Шишонин
  6. массаж
  7. Написать игру
  8. Таро
  9. растяжка
  10. Крадник
Сверху