Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 144

Копирование строки при клике мышью

18.09.2025, 00:45. Показов 4750. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я хотел бы, чтобы в программе, когда нажимаешь на строчку левой кнопкой мыши, она копировалась, выделяясь например красным цветом, и когда ты копируешь другую, то выделение переходит на неё и строчка копировалась. Пробовал с ListBox, строчки копировались, но нельзя было добавить текст, который не должен копироваться. Пришлось заменить на RichTextBox, чтобы можно было вписать и строчки копируемые и некопируемые, но строчки не копируются. Также, я хотел сделать, чтобы текст выезжал при нажатии на заголовок, как показано на первом скриншоте(Типа есть несколько блоков с заголовками, нажимая на которые можно показать и скрыть текст), но не смог. Меню боковое тоже хотел сделать как на первом скриншоте, но ничего не вышло. Форма моей программы на втором скриншоте. Помогите пожалуйста.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            button1.FlatStyle = FlatStyle.Flat;
            button1.FlatAppearance.BorderSize = 0;
            button2.FlatStyle = FlatStyle.Flat;
            button2.FlatAppearance.BorderSize = 0;
            button3.FlatStyle = FlatStyle.Flat;
            button3.FlatAppearance.BorderSize = 0;
            button4.FlatStyle = FlatStyle.Flat;
            button4.FlatAppearance.BorderSize = 0;
            button5.FlatStyle = FlatStyle.Flat;
            button5.FlatAppearance.BorderSize = 0;
            button6.FlatStyle = FlatStyle.Flat;
            button6.FlatAppearance.BorderSize = 0;
            button7.FlatStyle = FlatStyle.Flat;
            button7.FlatAppearance.BorderSize = 0;
            button8.FlatStyle = FlatStyle.Flat;
            button8.FlatAppearance.BorderSize = 0;
            button9.FlatStyle = FlatStyle.Flat;
            button9.FlatAppearance.BorderSize = 0;
            button10.FlatStyle = FlatStyle.Flat;
            button10.FlatAppearance.BorderSize = 0;
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            {
               // Заполнение RichTextBox
            AddCopyableLine(richTextBox1, "say Пожалуйста, положите Ваш паспорт на стол в открытом виде.");
                AddNonCopyableLine(richTextBox1, "Ждём отыгровок");
                AddCopyableLine(richTextBox1, "me изучил паспорт");
                AddCopyableLine(richTextBox1, "say Для получения медицинской карты необходимо пройти проверку на наличие алкоголя в крови, Вы согласны?");
                AddNonCopyableLine(richTextBox1, "В случае отказа:");
                AddCopyableLine(richTextBox1, "say Вам отказано в выдаче медицинской карты.");
                AddNonCopyableLine(richTextBox1, "В случае согласия:");
                AddCopyableLine(richTextBox1, "do В медицинской сумке лежит кейс с прибором \"Drager\".");
                AddCopyableLine(richTextBox1, "me достал кейс, открыл его и вытащил прибор \"Drager\"");
                AddCopyableLine(richTextBox1, "say При освидетельствовании будет использован прибор \"Drager\".");
                AddCopyableLine(richTextBox1, "do На устройстве можно заметить пломбу.");
                AddCopyableLine(richTextBox1, "todo Пломба на приборе присутствует*показав пломбу гражданину");
 
                // Добавьте остальные строки
 
                // Подписка на событие MouseClick
                richTextBox1.MouseClick += new MouseEventHandler(richTextBox1_MouseClick);
 
                // Делаем RichTextBox доступным только для чтения
                richTextBox1.ReadOnly = true;
            }
        }
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
        }
        private void button1_Click(object sender, EventArgs e)
        {
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
        }
        private void AddCopyableLine(RichTextBox rtb, string text)
        {
            rtb.AppendText(text + Environment.NewLine);
        }
 
        private void AddNonCopyableLine(RichTextBox rtb, string text)
        {
            rtb.AppendText(text + Environment.NewLine);
        
    }
 
        private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
        {
            int index = richTextBox1.GetCharIndexFromPosition(e.Location);
            int lineNumber = richTextBox1.GetLineFromCharIndex(index);
            string line = richTextBox1.Lines[lineNumber];
 
            if (line.StartsWith("copy:"))
            {
                // Копируем текст без префикса "copy:"
                Clipboard.SetText(line.Substring(5));
            }
        }
    }
        }
Миниатюры
Копирование строки при клике мышью   Копирование строки при клике мышью  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.09.2025, 00:45
Ответы с готовыми решениями:

Динамическое создание PictureBox при клике мышью по форме
Здравствуйте! Сегодня решил спросить. А можно сделать так чтобы при каждом нажатии мыши на форме...

Выделение всего текста в TextBox при клике мышью
Друзья, подскажите пожалуйста как можно реализовать выделение ВСЕГО текста в TextBox'е посредством...

Изменение текста в TextBox элемента в GridView при клике мышью
Здравствуйте, господа. Есть у меня GridView, который заполняется из файла json. У элемента есть...

48
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,732
Записей в блоге: 1
18.09.2025, 11:55
Цитата Сообщение от Pirat Piratych Посмотреть сообщение
Также, я хотел сделать, чтобы текст выезжал при нажатии на заголовок
Текст или боковая панель?
Если панель, то это можно реализовать через таймер. Однако в формах это будет люто мерцать и желаемый эффект превратится в позор разработчика.
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 144
18.09.2025, 13:03  [ТС]
Ну как на первом, скрине, на сайте. Типа, в боковой панеле разделы, раскрыв которые, ты можешь выбрать уже нужный пункт раздела. А в основной части уже раскрыть нужный блок с отыгровками.
0
 Аватар для Andrey-MSK
3339 / 2226 / 387
Регистрация: 14.08.2018
Сообщений: 7,517
Записей в блоге: 4
18.09.2025, 13:31
Цитата Сообщение от Pirat Piratych Посмотреть сообщение
Типа есть несколько блоков с заголовками, нажимая на которые можно показать и скрыть текст
В WPF это делается запросто. Expander.

Контейнеры GroupBox и Expander
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 144
18.09.2025, 13:59  [ТС]
У меня C# Windows forms.
0
sleep
 Аватар для I can
4931 / 4593 / 840
Регистрация: 13.04.2015
Сообщений: 9,754
18.09.2025, 14:02
Цитата Сообщение от Pirat Piratych Посмотреть сообщение
У меня C# Windows forms.
Ты же только начал. Или принципиально нужны Windows forms ?
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 144
18.09.2025, 14:08  [ТС]
Я хочу на Windows forms. И сначала мне бы с копированием разобраться.
0
 Аватар для Andrey-MSK
3339 / 2226 / 387
Регистрация: 14.08.2018
Сообщений: 7,517
Записей в блоге: 4
18.09.2025, 14:17
Цитата Сообщение от Pirat Piratych Посмотреть сообщение
Я хочу на Windows forms.
Ну ищите похожий контрол. Должно быть там что-то...
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3406 / 2727 / 575
Регистрация: 04.09.2018
Сообщений: 8,565
Записей в блоге: 3
18.09.2025, 14:29
Цитата Сообщение от Uswer Посмотреть сообщение
Однако в формах это будет люто мерцать
Почему же? Если делать прямыми руками, то может получится очень даже ничего:

WinForms NET4.8...
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,732
Записей в блоге: 1
18.09.2025, 14:41
Цитата Сообщение от wizard41 Посмотреть сообщение
может получится очень даже ничего
Ну ОК, тогда дайте правильный совет ТСу, можно даже кодом.
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 144
18.09.2025, 14:56  [ТС]
Только мне надо, не чтобы меню сворачивалось до иконок, а чтобы разделы в меню могли открыться, и там я бы выбрал уже нужный пункт. Ну и копирование само собой. Но оно не работает в RichTextBox. Видимо буду каждую строчку в лист бокс новый добавлять.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3406 / 2727 / 575
Регистрация: 04.09.2018
Сообщений: 8,565
Записей в блоге: 3
18.09.2025, 15:02
Цитата Сообщение от Uswer Посмотреть сообщение
даже кодом
Код не дам. Дам наводку: нужно немного подучить/понять работу GDI+ совместно со своим приложением, и научиться буферизовывать контролы, подвергающиеся трансформации.

Pirat Piratych, это будет ощутимо сложнее, чем последовать совету попробовать на WPF.
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 144
18.09.2025, 15:07  [ТС]
Хорошо. А как быть с копированием?
0
sleep
 Аватар для I can
4931 / 4593 / 840
Регистрация: 13.04.2015
Сообщений: 9,754
18.09.2025, 18:53
Лучший ответ Сообщение было отмечено Pirat Piratych как решение

Решение

Pirat Piratych,
Вложения
Тип файла: rar 888.rar (115.8 Кб, 16 просмотров)
1
sleep
 Аватар для I can
4931 / 4593 / 840
Регистрация: 13.04.2015
Сообщений: 9,754
19.09.2025, 09:32
Pirat Piratych, ну что, разобрался? Там на 90% твоя задача реализована
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 144
19.09.2025, 10:27  [ТС]
Да. Спасибо большое!)

Добавлено через 19 минут
А я же могу такие же панельки добавить и в боковое меню, чтобы разделы можно быть скрывать и раскрывать?
0
sleep
 Аватар для I can
4931 / 4593 / 840
Регистрация: 13.04.2015
Сообщений: 9,754
19.09.2025, 11:16
Цитата Сообщение от Pirat Piratych Посмотреть сообщение
А я же могу такие же панельки добавить и в боковое меню, чтобы разделы можно быть скрывать и раскрывать?
Подожди минутку, сейчас немного изменю код, чтобы можно было добавлять боковые меню.
0
sleep
 Аватар для I can
4931 / 4593 / 840
Регистрация: 13.04.2015
Сообщений: 9,754
19.09.2025, 11:35
Вот, смотри, где можно боковые пункты меню добавить:
Вложения
Тип файла: rar C# Навигация.rar (119.2 Кб, 2 просмотров)
0
 Аватар для Andrey-MSK
3339 / 2226 / 387
Регистрация: 14.08.2018
Сообщений: 7,517
Записей в блоге: 4
19.09.2025, 11:39
I can,

Не по теме:

Перевод на русский нормально сделали или опять куча косяков есть?

0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 144
19.09.2025, 11:58  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
Вот, смотри, где можно боковые пункты меню добавить:
Немного не то. Если смотреть на сайт-образец из первого скрина, там можно нажать, допустим на "Общее МЗ" в боковом меню и раскроются разделы в этом же боковом меню, на которые уже можно будет нажать и открыть нужный.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.09.2025, 11:58
Помогаю со студенческими работами здесь

Как создать кнопку или поле ввода при клике мышью на форме?
Привет, требуется помощь с лабкой, но похоже я стою на асфальте в лыжи обутый. Не могу понять даже...

Как создать кнопку или поле ввода при клике мышью на форме? - C#
Привет, требуется помощь с лабкой, задание 3 курса универа, с# только начали учить в этом...

Как сделать информационное окно, которое при клике по нему мышью не будет активировано?
Здравствуйте! Подскажите, можно ли сделать так, чтобы при нажатии на любом месте окна оно не...

При клике по панели и последующем клике в другом месте затрагиваемая панель должна сменить положение
Уверен, что подобные вопросы задавались не раз и не два, но все же осмелюсь задать вопрос. Итак,...

Выделение строки при наведении на неё мышью
Всем доброго времени суток! Пишу приложение и нужно организовать выделение всей строки в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru