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

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

18.09.2025, 00:45. Показов 6059. Ответов 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
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3465 / 2785 / 576
Регистрация: 04.09.2018
Сообщений: 8,763
Записей в блоге: 3
24.09.2025, 20:30
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от I can Посмотреть сообщение
Да и их добавить не проблема.
Для ТСа будет проблемой.
Мягко говоря, для своего опыта и знаний он взял себе слишком сложную задачу. Сам не осилит, а делать за него вряд ли кто будет.
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 154
25.09.2025, 21:30  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Короче, не разберется.
Разобрался.

C#:
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
using System;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
using System.Linq;
 
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            FillControls();
            this.DoubleBuffered = true;
        }
 
        private void FillControls()
        {
            string json = System.IO.File.ReadAllText(Application.StartupPath + "\\myMenu.json", System.Text.Encoding.UTF8);
            var myMenu = Newtonsoft.Json.JsonConvert.DeserializeObject<ClassDataLevel1[]>(json);
            for (int i = 0; i < myMenu.Length; i++)
            {
                StructDataForUC[] bb = new StructDataForUC[myMenu[i].data.Length];
                for (int j = 0; j < myMenu[i].data.Length; j++)
                {
                    bb[j] = new StructDataForUC(myMenu[i].data[j].text, i.ToString() + " " + j.ToString(), true); // заполняем массив данными из файла
                    for (int k = 0; k < myMenu[i].data[j].data.Length; k++)
                    {
                        if (myMenu[i].data[j].data[k].data != null)
                        {
                            StructDataForUC[] bbb = new StructDataForUC[myMenu[i].data[j].data[k].data.Length];
                            for (int m = 0; m < myMenu[i].data[j].data[k].data.Length; m++)
                            {
                                bbb[m] = new StructDataForUC(myMenu[i].data[j].data[k].data[m].text, i.ToString() + " " + j.ToString() + " " + k.ToString() + " " + m.ToString(), myMenu[i].data[j].data[k].data[m].Copyable);
                            }
                            AddNewPanel(flowLayoutPanel2, i.ToString() + " " + j.ToString() + " " + k.ToString(), myMenu[i].data[j].data[k].text, bbb); // добавление на правую панель пунктов
                        }
                        else
                        {
                            AddNewPanel(flowLayoutPanel2, i.ToString() + " " + j.ToString() + " " + k.ToString(), myMenu[i].data[j].data[k].text, new StructDataForUC[1] { new StructDataForUC("", i.ToString() + " " + j.ToString() + " " + k.ToString() + " 0", false) }); // добавление на правую панель пунктов
                        }
                    }
                }
                AddNewPanelMenu(flowLayoutPanel1, i.ToString(), myMenu[i].text, bb); // добавление в боковую панель пункта меню
            }
        }
 
        private void Form1_Resize(object sender, EventArgs e)
        {
            flowLayoutPanel2.Top = 0;
            flowLayoutPanel2.Left = flowLayoutPanel1.Left + flowLayoutPanel1.Width + 10;
            flowLayoutPanel2.Width = this.ClientSize.Width - flowLayoutPanel1.Width - 15;
            flowLayoutPanel2.Height = this.ClientSize.Height;
            foreach (Object ff in flowLayoutPanel2.Controls)
            {
                UC u = ff as UC;
                if (u != null)
                {
                    u.Width = flowLayoutPanel2.Width - 25;
                    u.Left = 0;
                }
            }
        }
 
        private void AddNewPanelMenu(FlowLayoutPanel flp, string tag, string caption, StructDataForUC[] arr)
        {
            flp.Controls.Add(new UCM(caption, tag, arr, flowLayoutPanel2));
        }
 
        private void AddNewPanel(FlowLayoutPanel flp, string tag, string caption, StructDataForUC[] arr)
        {
            flp.Controls.Add(new UC(caption, tag, arr));
        }
    }
 
    public class ClassDataLevel1
    {
        public string text;
        public ClassDataLevel2[] data;
        public ClassDataLevel1(string text, params ClassDataLevel2[] data)
        {
            this.text = text;
            this.data = data;
        }
    }
 
    public class ClassDataLevel2
    {
        public string text;
        public ClassDataLevel3[] data;
        public ClassDataLevel2(string text, params ClassDataLevel3[] data)
        {
            this.text = text;
            this.data = data;
        }
    }
 
    public class ClassDataLevel3
    {
        public string text;
        public ClassDataLevel4[] data;
        public ClassDataLevel3(string text, params ClassDataLevel4[] data)
        {
            this.text = text;
            this.data = data;
        }
    }
 
    public class ClassDataLevel4
    {
        public string text;
        public bool Copyable;
        public ClassDataLevel4(string text, bool copyable)
        {
            this.text = text;
            this.Copyable = copyable;
        }
    }
 
    public struct StructDataForUC
    {
        public string text;
        public bool Copyable;
        public string mTag;
        public StructDataForUC(string _text, string _tag, bool _Copyable)
        {
            text = _text;
            Copyable = _Copyable;
            mTag = _tag;
        }
    }
 
    public class ClassClickedPanels
    {
        public void ShowClickedPanels(FlowLayoutPanel f, string s)
        {
            foreach (Object o in f.Controls)
            {
                UC uc = o as UC;
                if (uc != null)
                {
                    uc.Visible = false;
                    if (s.Split()[0] + " " + s.Split()[1] == uc.Tag.ToString().Split()[0] + " " + uc.Tag.ToString().Split()[1])
                        uc.Visible = true;
                }
            }
        }
    }
 
    public static class JsonHelper
    {
        // Рекурсивно ищет узел по пути и добавляет новый элемент в его Data.
        public static void AddItem(JArray menu, string[] path, JObject newItem)
        {
            if (path == null || path.Length == 0)
                return;
 
            foreach (var item in menu.Children<JObject>())
            {
                if (item.Value<string>("Text") == path[0])
                {
                    if (path.Length == 1)
                    {
                        // Найден нужный уровень – добавляем в свойство Data.
                        if (item["Data"] is JArray)
                            ((JArray)item["Data"]).Add(newItem);
                        else
                            item["Data"] = new JArray(newItem);
                    }
                    else if (item["Data"] is JArray)
                    {
                        // Рекурсивный вызов для следующего уровня.
                        AddItem((JArray)item["Data"], path.Skip(1).ToArray(), newItem);
                    }
                }
            }
        }
 
        // Добавляет новый элемент, обходя узлы по индексам.
        // path – массив индексов для перехода по Data.
        public static void AddItemByIndex(JArray menu, int[] path, JObject newItem)
        {
            try
            {
                if (path == null || path.Length == 0) return;
 
                JArray currentArray = menu;
                JObject currentObj = null;
                for (int i = 0; i < path.Length; i++)
                {
                    if (path[i] < 0 || path[i] >= currentArray.Count)
                        throw new IndexOutOfRangeException("Неверный индекс.");
 
                    currentObj = currentArray[path[i]] as JObject;
                    if (currentObj == null)
                        throw new Exception("Ожидался объект.");
 
                    if (i < path.Length - 1)
                    {
                        JArray nextArray = currentObj["Data"] as JArray;
                        if (nextArray == null)
                        {
                            nextArray = new JArray();
                            currentObj["Data"] = nextArray;
                        }
                        currentArray = nextArray;
                    }
                }
 
                if (currentObj != null)
                {
                    JArray targetArray = currentObj["Data"] as JArray;
                    if (targetArray == null)
                    {
                        targetArray = new JArray();
                        currentObj["Data"] = targetArray;
                    }
                    targetArray.Add(newItem);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        // Удаляет элемент по заданному пути индексов.
        public static void RemoveItemByIndex(JArray menu, int[] path)
        {
            if (path == null || path.Length == 0) return;
 
            // Если удаляем элемент верхнего уровня.
            if (path.Length == 1)
            {
                if (path[0] < 0 || path[0] >= menu.Count)
                    throw new IndexOutOfRangeException("Неверный индекс верхнего уровня.");
                menu.RemoveAt(path[0]);
                return;
            }
 
            // Проходим по вложенным уровням, кроме последнего.
            JArray currentArray = menu;
            for (int i = 0; i < path.Length - 1; i++)
            {
                if (path[i] < 0 || path[i] >= currentArray.Count)
                    throw new IndexOutOfRangeException("Неверный индекс на уровне " + i);
 
                var currentObj = currentArray[path[i]] as JObject;
                if (currentObj == null)
                    throw new Exception("Ожидался объект на уровне " + i);
 
                if (!(currentObj["Data"] is JArray))
                    throw new Exception("Элемент на уровне " + i + " не содержит Data.");
 
                currentArray = (JArray)currentObj["Data"];
            }
 
            int removeIndex = path[path.Length - 1];
            if (removeIndex < 0 || removeIndex >= currentArray.Count)
                throw new IndexOutOfRangeException("Неверный индекс для удаления.");
 
            currentArray.RemoveAt(removeIndex);
        }
    }
}
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
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 frmNewItem : Form
    {
        public string txt = "";
        public bool b = false;
        public frmNewItem()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            txt = this.textBox1.Text.Trim();
            b = this.checkBox1.Checked;
            this.Close();
        }
    }
}
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 154
25.09.2025, 21:30  [ТС]
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Newtonsoft.Json.Linq;
 
 
namespace WindowsFormsApplication1
{
    public partial class UC : UserControl
    {
        bool b = false;
        int H = 23;
        string myTag;
        string tmpTag = "";
        readonly Color Color1 = Color.Yellow;    // Цвет шрифта подменю на правой панели
        readonly Color Color2 = Color.LightBlue; // Цвет шрифта подменю на правой панели (активный)
        readonly Color Color3 = Color.Pink;      // Цвет шрифта подменю на правой панели (неактивный)
        readonly Color Color4 = Color.Transparent;
 
        public UC(string caption, string tag, StructDataForUC[] arr)
        {
            InitializeComponent();
            Color4 = this.BackColor;
            lblCaption.ForeColor = Color1;
            lblCaption.Text = caption;
            lblCaption.Font = new Font("Tahoma", 10, FontStyle.Bold);
            this.Tag = tag;
            myTag = tag;
            FillUC(arr);
            this.Visible = false;
        }
 
        private void FillUC(StructDataForUC[] arr)
        {
            // H =  arr.Length * 20 + button1.Height ;
            int maxH = button1.Height;
            int lastTop = arr.Length * 20;
            for (int i = 0; i < arr.Length; i++)
            {
                Label l = new Label() { Tag = arr[i].mTag.ToString(), Text = arr[i].text };
                this.Controls.Add(l);
                l.Font = new Font("Tahoma", 10, FontStyle.Bold);
                l.Top = button1.Height + 2 + l.Height * i + 20;
                l.Left = 20;
                l.AutoSize = true;
                l.Text = arr[i].text;
                TT.SetToolTip(l, l.Text);
                if (arr[i].Copyable)
                {
                    l.MouseUp += new System.Windows.Forms.MouseEventHandler(Lab_MouseUp);
                    l.ForeColor = Color2;
                    l.Cursor = Cursors.Hand;
                }
                else
                    l.ForeColor = Color3;
                //H = l.Top + l.Height + 20 ;
                if (maxH < l.Height) maxH = l.Height;
                if (lastTop < l.Top) lastTop = l.Top;
                l.BackColor = Color4;
                //  l.ContextMenuStrip = CMS;
            }
            H = lastTop + maxH + 10;
            this.Height = b ? H : button1.Height;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            b = !b;
            this.Height = b ? H : button1.Height;
            button1.Text = b ? "^" : ">";
        }
 
        private void Lab_MouseUp(object sender, MouseEventArgs e)
        {
            foreach (Object o in this.Parent.Controls)
            {
                UC uu = o as UC;
                if (uu != null)
                {
                    foreach (Object la in uu.Controls)
                    {
                        Label lab = la as Label;
                        if (lab != null)
                        {
                            lab.BackColor = Color4;
                            if (lab.ForeColor != Color1 && lab.ForeColor != Color3)
                                lab.ForeColor = Color2;
                        }
                    }
                }
            }
            Label l = (Label)sender;
            tmpTag = l.Tag.ToString();
            Color c = l.BackColor;
            l.BackColor = Color2;
            l.ForeColor = c;
            l.Refresh();
            Clipboard.SetText(l.Text);
            // MessageBox.Show(l.Tag.ToString() + "    " + l.Text);
 
            // Чтобы выделение цветом не фиксировалось
            //System.Threading.Thread.Sleep(200);
            //l.Refresh();
            //l.BackColor = c;// Color.Red; 
            //l.ForeColor=Color2; 
        }
 
        private void добавитьПунктМенюToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string f = Application.StartupPath + "\\myMenu.json";
            string json = System.IO.File.ReadAllText(f, System.Text.Encoding.UTF8);
            JArray menu = JArray.Parse(json);
            frmNewItem fo = new frmNewItem();
            string ss = ""; bool bb = false;
            if (fo.ShowDialog() == DialogResult.OK)
            {
                ss = fo.txt; bb = fo.b;
            }
            else
            {
                fo.Dispose(); return;
            }
            // Добавляем новый элемент "Новый пункт" в "Меню №1" -> "Подменю №11" -> "Первая панелька с правой стороны"
            var newEntry = new JObject
            {
                 { "Text", ss }
            };
            string[] s = myTag.Split();
 
            //JsonHelper.AddItem(menu, new string[] { "Меню №1", "Подменю №11", "Первая панелька с правой стороны" }, newEntry);
            // Добавляем новый элемент в [0]["Data"][1]["Data"][2]
            JsonHelper.AddItemByIndex(menu, new int[] { Convert.ToInt32(s[0]), Convert.ToInt32(s[1]) }, newEntry);
 
            // Сохраняем изменения
            System.IO.File.WriteAllText(f, menu.ToString(), System.Text.Encoding.UTF8);
            Application.Restart();
        }
 
        private void добавитьПунктПодменюToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string f = Application.StartupPath + "\\myMenu.json";
            string json = System.IO.File.ReadAllText(f, System.Text.Encoding.UTF8);
            JArray menu = JArray.Parse(json);
            frmNewItem fo = new frmNewItem();
            string ss = ""; bool bb = false;
            if (fo.ShowDialog() == DialogResult.OK)
            {
                ss = fo.txt; bb = fo.b;
            }
            else
            {
                fo.Dispose(); return;
            }
            // Добавляем новый элемент "Новый пункт" в "Меню №1" -> "Подменю №11" -> "Первая панелька с правой стороны"
            var newEntry = new JObject
            {
                 { "Text", ss },
                 { "Copyable", bb }
            };
            string[] s = myTag.Split();
 
            //JsonHelper.AddItem(menu, new string[] { "Меню №1", "Подменю №11", "Первая панелька с правой стороны" }, newEntry);
            // Добавляем новый элемент в [0]["Data"][1]["Data"][2]
            JsonHelper.AddItemByIndex(menu, new int[] { Convert.ToInt32(s[0]), Convert.ToInt32(s[1]), Convert.ToInt32(s[2]) }, newEntry);
 
            // Сохраняем изменения
            System.IO.File.WriteAllText(f, menu.ToString(), System.Text.Encoding.UTF8);
            Application.Restart();
        }
 
        //private void удалитьToolStripMenuItem_Click(object sender, EventArgs e)
        //{
        //    string f = Application.StartupPath + "\\myMenu.json";
        //    string json = System.IO.File.ReadAllText(f, System.Text.Encoding.UTF8);
        //    JArray menu = JArray.Parse(json);
        //    string sss = tmpTag.ToString();
        //    string[] s = myTag.Split();
 
        //    // Удаляем элемент по пути: верхний уровень[0] -> вложенный Data[1] -> вложенный Data[2]
        //    JsonHelper.RemoveItemByIndex(menu, new int[] { Convert.ToInt32(s[0]), Convert.ToInt32(s[1]), Convert.ToInt32(s[2]) });
 
        //    System.IO.File.WriteAllText(f, menu.ToString(), System.Text.Encoding.UTF8);
        //    Application.Restart();
 
        //}
    }
}
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
99
100
101
102
103
104
105
106
107
108
109
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class UCM : UserControl
    {
        bool b = false;
        int H = 23;
        readonly FlowLayoutPanel f = null;
        readonly Color Color1 = Color.White;       // Цвет шрифта меню на боковой панели
        readonly Color Color2 = Color.DarkOrange;  // Цвет шрифта подменю на боковой панели
        readonly Color Color3 = Color.Transparent;
        public UCM(string caption, string tag, StructDataForUC[] arr, FlowLayoutPanel ff)
        {
            InitializeComponent();
            Color3 = this.BackColor;
            lblCaption.Text = caption;
            lblCaption.ForeColor = Color1;
            lblCaption.Font = new Font("Tahoma", 10, FontStyle.Bold);
            this.Tag = tag;
            FillUC(arr);
            f = ff;
        }
 
        private void FillUC(StructDataForUC[] arr)
        {
            if (arr == null) return;
            //H = arr.Length * 20 + button1.Height;
            int maxH = button1.Height;
            int lastTop = arr.Length * 20;
            for (int i = 0; i < arr.Length; i++)
            {
                Label l = new Label() { Tag = arr[i].mTag };
                this.Controls.Add(l);
                l.Font = new Font("Tahoma", 10, FontStyle.Bold);
                l.Left = 2;
                l.Width = l.Parent.Width - 5;
                l.AutoSize = false;
                l.AutoEllipsis = true;
                l.Text = arr[i].text;
                if (maxH < l.Height) maxH = l.Height;
                l.Top = button1.Height + 2 + maxH * i + 20;
                l.TextAlign = ContentAlignment.MiddleLeft;
                TT.SetToolTip(l, l.Text);
                if (arr[i].Copyable)
                {
                    l.MouseUp += new System.Windows.Forms.MouseEventHandler(Lab_MouseUp);
                    l.ForeColor = Color2;
                    l.Cursor = Cursors.Hand;
                }
                else
                    l.ForeColor = Color.Pink;
                //H = l.Top + l.Height + 20;
 
                lastTop = l.Top;
                l.BackColor = Color3;
            }
            H = lastTop + maxH + 10;
            this.Height = b ? H : button1.Height;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            b = !b;
            this.Height = b ? H : button1.Height;
            button1.Text = b ? "^" : "<";
        }
 
        private void Lab_MouseUp(object sender, MouseEventArgs e)
        {
            foreach (Object o in this.Parent.Controls)
            {
                UCM uu = o as UCM;
                if (uu != null)
                {
                    foreach (Object la in uu.Controls)
                    {
                        Label lab = la as Label;
                        if (lab != null)
                        {
                            lab.BackColor = Color3;
                            if (lab.ForeColor != Color1)
                                lab.ForeColor = Color2;
                        }
                    }
                }
            }
 
            Label l = (Label)sender;
            Color c = l.BackColor;
            l.BackColor = Color2;
            l.ForeColor = c;
            l.Refresh();
            ClassClickedPanels mc = new ClassClickedPanels();
            //foreach (Object o in f.Controls)
            //    if (o is UC) UC i = (UC)o;
            mc.ShowClickedPanels(f, l.Tag.ToString());
            //System.Threading.Thread.Sleep(200);
            //l.Refresh();
        }
    }
}
Весь день сидел.
1
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 154
26.09.2025, 22:52  [ТС]
Всё-таки что-то я видимо перемудрил. Не хочет запускаться.

Выводит при запуске, указывая на 21 строку Form1.cs:
Code
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
Newtonsoft.Json.JsonReaderException не обработано
  HResult=-2146233088
  LineNumber=2037
  LinePosition=0
  Message=Additional text encountered after finished reading JSON content: }. Path '', line 2037, position 0.
  Path=""
  Source=Newtonsoft.Json
  StackTrace:
       в Newtonsoft.Json.JsonTextReader.Read()
       в Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
       в Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
       в Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
       в Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
       в Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
       в WindowsFormsApplication1.Form1.FillControls() в E:\Программа\C# Навигация\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:строка 21
       в WindowsFormsApplication1.Form1..ctor() в E:\Программа\C# Навигация\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:строка 14
       в WindowsFormsApplication1.Program.Main() в E:\Программа\C# Навигация\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs:строка 18
       в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       в System.Threading.ThreadHelper.ThreadStart()
  InnerException:
Form1.cs:
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
using System;
using System.Windows.Forms;
using Newtonsoft.Json.Linq;
using System.Linq;
 
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            FillControls();
            this.DoubleBuffered = true;
        }
 
        private void FillControls()
        {
            string json = System.IO.File.ReadAllText(Application.StartupPath + "\\myMenu.json", System.Text.Encoding.UTF8);
            var myMenu = Newtonsoft.Json.JsonConvert.DeserializeObject<ClassDataLevel1[]>(json);
            for (int i = 0; i < myMenu.Length; i++)
            {
                StructDataForUC[] bb = new StructDataForUC[myMenu[i].data.Length];
                for (int j = 0; j < myMenu[i].data.Length; j++)
                {
                    bb[j] = new StructDataForUC(myMenu[i].data[j].text, i.ToString() + " " + j.ToString(), true); // заполняем массив данными из файла
                    for (int k = 0; k < myMenu[i].data[j].data.Length; k++)
                    {
                        if (myMenu[i].data[j].data[k].data != null)
                        {
                            StructDataForUC[] bbb = new StructDataForUC[myMenu[i].data[j].data[k].data.Length];
                            for (int m = 0; m < myMenu[i].data[j].data[k].data.Length; m++)
                            {
                                bbb[m] = new StructDataForUC(myMenu[i].data[j].data[k].data[m].text, i.ToString() + " " + j.ToString() + " " + k.ToString() + " " + m.ToString(), myMenu[i].data[j].data[k].data[m].Copyable);
                            }
                            AddNewPanel(flowLayoutPanel2, i.ToString() + " " + j.ToString() + " " + k.ToString(), myMenu[i].data[j].data[k].text, bbb); // добавление на правую панель пунктов
                        }
                        else
                        {
                            AddNewPanel(flowLayoutPanel2, i.ToString() + " " + j.ToString() + " " + k.ToString(), myMenu[i].data[j].data[k].text, new StructDataForUC[1] { new StructDataForUC("", i.ToString() + " " + j.ToString() + " " + k.ToString() + " 0", false) }); // добавление на правую панель пунктов
                        }
                    }
                }
                AddNewPanelMenu(flowLayoutPanel1, i.ToString(), myMenu[i].text, bb); // добавление в боковую панель пункта меню
            }
        }
 
        private void Form1_Resize(object sender, EventArgs e)
        {
            flowLayoutPanel2.Top = 0;
            flowLayoutPanel2.Left = flowLayoutPanel1.Left + flowLayoutPanel1.Width + 10;
            flowLayoutPanel2.Width = this.ClientSize.Width - flowLayoutPanel1.Width - 15;
            flowLayoutPanel2.Height = this.ClientSize.Height;
            foreach (Object ff in flowLayoutPanel2.Controls)
            {
                UC u = ff as UC;
                if (u != null)
                {
                    u.Width = flowLayoutPanel2.Width - 25;
                    u.Left = 0;
                }
            }
        }
 
        private void AddNewPanelMenu(FlowLayoutPanel flp, string tag, string caption, StructDataForUC[] arr)
        {
            flp.Controls.Add(new UCM(caption, tag, arr, flowLayoutPanel2));
        }
 
        private void AddNewPanel(FlowLayoutPanel flp, string tag, string caption, StructDataForUC[] arr)
        {
            flp.Controls.Add(new UC(caption, tag, arr));
        }
    }
 
    public class ClassDataLevel1
    {
        public string text;
        public ClassDataLevel2[] data;
        public ClassDataLevel1(string text, params ClassDataLevel2[] data)
        {
            this.text = text;
            this.data = data;
        }
    }
 
    public class ClassDataLevel2
    {
        public string text;
        public ClassDataLevel3[] data;
        public ClassDataLevel2(string text, params ClassDataLevel3[] data)
        {
            this.text = text;
            this.data = data;
        }
    }
 
    public class ClassDataLevel3
    {
        public string text;
        public ClassDataLevel4[] data;
        public ClassDataLevel3(string text, params ClassDataLevel4[] data)
        {
            this.text = text;
            this.data = data;
        }
    }
 
    public class ClassDataLevel4
    {
        public string text;
        public bool Copyable;
        public ClassDataLevel4(string text, bool copyable)
        {
            this.text = text;
            this.Copyable = copyable;
        }
    }
 
    public struct StructDataForUC
    {
        public string text;
        public bool Copyable;
        public string mTag;
        public StructDataForUC(string _text, string _tag, bool _Copyable)
        {
            text = _text;
            Copyable = _Copyable;
            mTag = _tag;
        }
    }
 
    public class ClassClickedPanels
    {
        public void ShowClickedPanels(FlowLayoutPanel f, string s)
        {
            foreach (Object o in f.Controls)
            {
                UC uc = o as UC;
                if (uc != null)
                {
                    uc.Visible = false;
                    if (s.Split()[0] + " " + s.Split()[1] == uc.Tag.ToString().Split()[0] + " " + uc.Tag.ToString().Split()[1])
                        uc.Visible = true;
                }
            }
        }
    }
 
    public static class JsonHelper
    {
        // Рекурсивно ищет узел по пути и добавляет новый элемент в его Data.
        public static void AddItem(JArray menu, string[] path, JObject newItem)
        {
            if (path == null || path.Length == 0)
                return;
 
            foreach (var item in menu.Children<JObject>())
            {
                if (item.Value<string>("Text") == path[0])
                {
                    if (path.Length == 1)
                    {
                        // Найден нужный уровень – добавляем в свойство Data.
                        if (item["Data"] is JArray)
                            ((JArray)item["Data"]).Add(newItem);
                        else
                            item["Data"] = new JArray(newItem);
                    }
                    else if (item["Data"] is JArray)
                    {
                        // Рекурсивный вызов для следующего уровня.
                        AddItem((JArray)item["Data"], path.Skip(1).ToArray(), newItem);
                    }
                }
            }
        }
 
        // Добавляет новый элемент, обходя узлы по индексам.
        // path – массив индексов для перехода по Data.
        public static void AddItemByIndex(JArray menu, int[] path, JObject newItem)
        {
            try
            {
                if (path == null || path.Length == 0) return;
 
                JArray currentArray = menu;
                JObject currentObj = null;
                for (int i = 0; i < path.Length; i++)
                {
                    if (path[i] < 0 || path[i] >= currentArray.Count)
                        throw new IndexOutOfRangeException("Неверный индекс.");
 
                    currentObj = currentArray[path[i]] as JObject;
                    if (currentObj == null)
                        throw new Exception("Ожидался объект.");
 
                    if (i < path.Length - 1)
                    {
                        JArray nextArray = currentObj["Data"] as JArray;
                        if (nextArray == null)
                        {
                            nextArray = new JArray();
                            currentObj["Data"] = nextArray;
                        }
                        currentArray = nextArray;
                    }
                }
 
                if (currentObj != null)
                {
                    JArray targetArray = currentObj["Data"] as JArray;
                    if (targetArray == null)
                    {
                        targetArray = new JArray();
                        currentObj["Data"] = targetArray;
                    }
                    targetArray.Add(newItem);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        // Удаляет элемент по заданному пути индексов.
        public static void RemoveItemByIndex(JArray menu, int[] path)
        {
            if (path == null || path.Length == 0) return;
 
            // Если удаляем элемент верхнего уровня.
            if (path.Length == 1)
            {
                if (path[0] < 0 || path[0] >= menu.Count)
                    throw new IndexOutOfRangeException("Неверный индекс верхнего уровня.");
                menu.RemoveAt(path[0]);
                return;
            }
 
            // Проходим по вложенным уровням, кроме последнего.
            JArray currentArray = menu;
            for (int i = 0; i < path.Length - 1; i++)
            {
                if (path[i] < 0 || path[i] >= currentArray.Count)
                    throw new IndexOutOfRangeException("Неверный индекс на уровне " + i);
 
                var currentObj = currentArray[path[i]] as JObject;
                if (currentObj == null)
                    throw new Exception("Ожидался объект на уровне " + i);
 
                if (!(currentObj["Data"] is JArray))
                    throw new Exception("Элемент на уровне " + i + " не содержит Data.");
 
                currentArray = (JArray)currentObj["Data"];
            }
 
            int removeIndex = path[path.Length - 1];
            if (removeIndex < 0 || removeIndex >= currentArray.Count)
                throw new IndexOutOfRangeException("Неверный индекс для удаления.");
 
            currentArray.RemoveAt(removeIndex);
        }
    }
}
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 154
26.09.2025, 22:55  [ТС]
JSHON:
JSON
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
[
  {
    "Text": "Общее МЗ",
    "Data": [
      {
        "Text": "Обязательные отыгровки",
        "Data": [
          {
            "Text": "Разговоры в r, ro, d",
            "Data": [
              {
                "Text": "do КПК висит на поясе.",
                "Copyable": true
              },
              {
                "Text": "me снял КПК с пояса и, зажав кнопку, начал что-то говорить в него",
                "Copyable": true
              },
              {
                "Text": "Что-то сообщаете в RP-рацию",
                "Copyable": false
              },
              {
                "Text": "me отжав кнопку, закончил что-то говорить в КПК и повесил его обратно на пояс",
                "Copyable": true
              }
            ]
          },
          {
            "Text": "Принятие вызова",
            "Data": [
              {
                "Text": "do КПК висит на поясе.",
                "Copyable": true
              },
              {
                "Text": "me снял КПК с пояса и, зажав кнопку, связался с диспетчером",
                "Copyable": true
              },
              {
                "Text": "me принял вызов от диспетчера и, отжав кнопку, повесил КПК обратно на пояс",
                "Copyable": true
              },
              {
                "Text": "to *ID вызова* (без звёздочек)",
                "Copyable": false
              }
            ]
          },
          {
            "Text": "Вытаскивание/затаскивание каталок в карету РСМП/СМП",
            "Data": [
              {
                "Text": "Вытаскивание:",
                "Copyable": false
              },
              {
                "Text": "me разжал фиксаторы и, схватившись руками за ручки каталок, вытащил их из АСМП на землю",
                "Copyable": true
              },
              {
                "Text": "Затаскивание:",
                "Copyable": false
              },
              {
                "Text": "me аккуратно затолкал каталки в АСМП и зажал фиксаторы",
                "Copyable": true
              },
              {
                "Text": "(Достать/убрать в Tab или - getcouch)",
                "Copyable": false
              }
            ]
          },
          {
            "Text": "Вытаскивание/затаскивание каталок в вертолёт СМП",
            "Data": [
              {
                "Text": "Вытаскивание:",
                "Copyable": false
              },
              {
                "Text": "me разжал фиксаторы и, схватившись руками за ручки каталок, вытащил их из ВСМП на землю",
                "Copyable": true
              },
              {
                "Text": "Затаскивание:",
                "Copyable": false
              },
              {
                "Text": "me аккуратно затолкал каталки в ВСМП и зажал фиксаторы",
                "Copyable": true
              },
              {
                "Text": "(Достать/убрать в Tab или - getcouch)",
                "Copyable": false
              }
            ]
          },
          {
            "Text": "Перекладывание пострадавшего на каталки",
            "Data": [
              {
                "Text": "В случае его невозможности ходить и встать или же 0 HP",
                "Copyable": false
              },
              {
                "Text": "do Под каталкой можно заметить небольшой красный рычажок.",
                "Copyable": true
              },
              {
                "Text": "me дёрнул рычаг на себя",
                "Copyable": true
              },
              {
                "Text": "do Внутри каталки послышался щелчок и она опустилась до нужного уровня.",
                "Copyable": true
              },
              {
                "Text": "Перекладываете через Tab или - loadcouch",
                "Copyable": false
              },
              {
                "Text": "me аккуратно переложил пострадавшего на каталку, после чего вернул её на прежний уровень",
                "Copyable": true
              }
            ]
          },
          {
            "Text": "Госпитализация пострадавшего из кареты РСМП/СМП",
            "Data": [
              {
                "Text": "do Реаниматолог с санитарами стоят со свободными каталками у автомобиля СМП.",
                "Copyable": true
              },
              {
                "Text": "do Сотрудники, открыв двери СМП, выкатили каталки и переложили пострадавшего на другие.",
                "Copyable": true
              },
              {
                "Text": "Hospital",
                "Copyable": false
              },
              {
                "Text": "do Санитар загрузил каталки в СМП.",
                "Copyable": true
              },
              {
                "Text": "do Пострадавший госпитализирован сотрудниками в операционную.",
                "Copyable": true
              }
            ]
          },
          {
            "Text": "Госпитализация пострадавшего из вертолёта СМП",
            "Data": [
              {
                "Text": "do Реаниматолог с санитарами стоят со свободными каталками у вертолёта СМП.",
                "Copyable": true
              },
              {
                "Text": "do Сотрудники, открыв двери СМП, выкатили каталки и переложили пострадавшего на другие.",
                "Copyable": true
              },
              {
                "Text": "Hospital",
                "Copyable": false
              },
              {
                "Text": "do Санитар загрузил каталки в СМП.",
                "Copyable": true
              },
              {
                "Text": "do Пострадавший госпитализирован сотрудниками в операционную.",
                "Copyable": true
              }
            ]
          },
          {
            "Text": "New Item",
            "Data": [
              {
                "Text": "New Item",
                "Copyable": false
              }
            ]
          }
        ]
      },
      {
        "Text": "Выдача мед.карты",
        "Data": [
          {
            "Text": "Выдача мед.карты",
            "Data": [
              {
                "Text": "Идёте туда, где есть компьютеры(кроме процедурных)",
                "Copyable": false
              },
              {
                "Text": "say Пожалуйста, положите Ваш паспорт на стол в открытом виде.",
                "Copyable": true
              },
              {
                "Text": "Ждём отыгровок",
                "Copyable": false
              },
              {
                "Text": "me изучил паспорт",
                "Copyable": true
              },
              {
                "Text": "say Для получения медицинской карты необходимо пройти проверку на наличие алкоголя в крови, Вы согласны?",
                "Copyable": true
              },
              {
                "Text": "В случае отказа:",
                "Copyable": false
              },
              {
                "Text": "say Вам отказано в выдаче медицинской карты.",
                "Copyable": true
              },
              {
                "Text": "В случае согласия:",
                "Copyable": false
              },
              {
                "Text": "do В медицинской сумке лежит кейс с прибором \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "me достал кейс, открыл его и вытащил прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say При освидетельствовании будет использован прибор \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "do На устройстве можно заметить пломбу.",
                "Copyable": true
              },
              {
                "Text": "todo Пломба на приборе присутствует*показав пломбу гражданину",
                "Copyable": true
              },
              {
                "Text": "say Прибор прошел сертификацию, исправен и полностью готов к работе.",
                "Copyable": true
              },
              {
                "Text": "do В медицинской сумке лежит сумочка с мундштуками.",
                "Copyable": true
              },
              {
                "Text": "me достал один запечатанный мундштук",
                "Copyable": true
              },
              {
                "Text": "say При Вас вскрываю новый мундштук",
                "Copyable": true
              },
              {
                "Text": "me вскрыл мундштук и вставил в прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say Выполним контрольный забор воздуха.",
                "Copyable": true
              },
              {
                "Text": "me выполнил контрольный забор воздуха на приборе",
                "Copyable": true
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор готов к работе. Пожалуйста, дыхните.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Предлагаем пройти медицинское освидетельствование через радиальное меню [TAB]",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения ниже 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор показал допустимое значение в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "Продолжаем проверку",
                "Copyable": false
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения выше 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в [x] промилле.",
                "Copyable": true
              },
              {
                "Text": "say Результат — [x] промилле. У Вас в крови обнаружена недопустимая концентрация алкоголя. В выдаче медицинской карты отказано.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "say Перейдем к проверке Вашего психологического состояния.",
                "Copyable": true
              },
              {
                "Text": "say Что такое DM?",
                "Copyable": true
              },
              {
                "Text": "say Присядьте.",
                "Copyable": true
              },
              {
                "Text": "b Вставайте, перейдем к следующему этапу.",
                "Copyable": true
              },
              {
                "Text": "say Вставайте.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "do Компьютер напротив включён.",
                "Copyable": true
              },
              {
                "Text": "do На компьютере запущена медицинская база.",
                "Copyable": true
              },
              {
                "Text": "me начал искать медицинскую карту гражданина в медицинской базе",
                "Copyable": true
              },
              {
                "Text": "do Рядом с компьютером стоит принтер.",
                "Copyable": true
              },
              {
                "Text": "me нашёл медицинскую карту гражданина и отправил её на печать",
                "Copyable": true
              },
              {
                "Text": "do Принтер напечатал медицинскую карту.",
                "Copyable": true
              },
              {
                "Text": "me взял из принтера медицинскую карту",
                "Copyable": true
              },
              {
                "Text": "todo Держите, Ваша медицинская карта*передав медицинскую карту человеку напротив",
                "Copyable": true
              },
              {
                "Text": "say Не забудьте забрать свой паспорт.",
                "Copyable": true
              },
              {
                "Text": "Прощаемся с ним",
                "Copyable": false
              }
            ]
          }
        ]
      },
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 154
26.09.2025, 22:56  [ТС]
JSON
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
      {
        "Text": "Мед.комиссия МВД",
        "Data": [
          {
            "Text": "Медицинская комиссмя МВД",
            "Data": [
              {
                "Text": "Идёте туда, где есть компьютеры(кроме процедурных)",
                "Copyable": false
              },
              {
                "Text": "say Пожалуйста, положите Ваш паспорт на стол в открытом виде.",
                "Copyable": true
              },
              {
                "Text": "Ждём отыгровок",
                "Copyable": false
              },
              {
                "Text": "me изучил паспорт",
                "Copyable": true
              },
              {
                "Text": "say Для получения медицинской карты необходимо пройти проверку на наличие алкоголя в крови, Вы согласны?",
                "Copyable": true
              },
              {
                "Text": "В случае отказа:",
                "Copyable": false
              },
              {
                "Text": "say Вам отказано в выдаче медицинской карты.",
                "Copyable": true
              },
              {
                "Text": "В случае согласия:",
                "Copyable": false
              },
              {
                "Text": "do В медицинской сумке лежит кейс с прибором \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "me достал кейс, открыл его и вытащил прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say При освидетельствовании будет использован прибор \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "do На устройстве можно заметить пломбу.",
                "Copyable": true
              },
              {
                "Text": "todo Пломба на приборе присутствует*показав пломбу гражданину",
                "Copyable": true
              },
              {
                "Text": "say Прибор прошел сертификацию, исправен и полностью готов к работе.",
                "Copyable": true
              },
              {
                "Text": "do В медицинской сумке лежит сумочка с мундштуками.",
                "Copyable": true
              },
              {
                "Text": "me достал один запечатанный мундштук",
                "Copyable": true
              },
              {
                "Text": "say При Вас вскрываю новый мундштук",
                "Copyable": true
              },
              {
                "Text": "me вскрыл мундштук и вставил в прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say Выполним контрольный забор воздуха.",
                "Copyable": true
              },
              {
                "Text": "me выполнил контрольный забор воздуха на приборе",
                "Copyable": true
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор готов к работе. Пожалуйста, дыхните.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Предлагаем пройти медицинское освидетельствование через радиальное меню [TAB]",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения ниже 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор показал допустимое значение в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "Продолжаем проверку",
                "Copyable": false
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения выше 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в [x] промилле.",
                "Copyable": true
              },
              {
                "Text": "say Результат — [x] промилле. У Вас в крови обнаружена недопустимая концентрация алкоголя. В выдаче медицинской карты отказано.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "say Перейдем к проверке Вашего психологического состояния.",
                "Copyable": true
              },
              {
                "Text": "say Что такое DM?",
                "Copyable": true
              },
              {
                "Text": "say Присядьте.",
                "Copyable": true
              },
              {
                "Text": "b Вставайте, перейдем к следующему этапу.",
                "Copyable": true
              },
              {
                "Text": "say Вставайте.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "do Компьютер напротив включён.",
                "Copyable": true
              },
              {
                "Text": "do На компьютере запущена медицинская база.",
                "Copyable": true
              },
              {
                "Text": "me начал искать медицинскую карту гражданина в медицинской базе",
                "Copyable": true
              },
              {
                "Text": "do Рядом с компьютером стоит принтер.",
                "Copyable": true
              },
              {
                "Text": "me нашёл медицинскую карту гражданина и отправил её на печать",
                "Copyable": true
              },
              {
                "Text": "do Принтер напечатал медицинскую карту.",
                "Copyable": true
              },
              {
                "Text": "me взял из принтера медицинскую карту",
                "Copyable": true
              },
              {
                "Text": "todo Держите, Ваша медицинская карта*передав медицинскую карту человеку напротив",
                "Copyable": true
              },
              {
                "Text": "say Не забудьте забрать свой паспорт.",
                "Copyable": true
              },
              {
                "Text": "Прощаемся с ним",
                "Copyable": false
              }
            ]
          }
        ]
      },
      {
        "Text": "Комиссионные обследования",
        "Data": [
          {
            "Text": "Выдача мед.карты",
            "Data": [
              {
                "Text": "Идёте туда, где есть компьютеры(кроме процедурных)",
                "Copyable": false
              },
              {
                "Text": "say Пожалуйста, положите Ваш паспорт на стол в открытом виде.",
                "Copyable": true
              },
              {
                "Text": "Ждём отыгровок",
                "Copyable": false
              },
              {
                "Text": "me изучил паспорт",
                "Copyable": true
              },
              {
                "Text": "say Для получения медицинской карты необходимо пройти проверку на наличие алкоголя в крови, Вы согласны?",
                "Copyable": true
              },
              {
                "Text": "В случае отказа:",
                "Copyable": false
              },
              {
                "Text": "say Вам отказано в выдаче медицинской карты.",
                "Copyable": true
              },
              {
                "Text": "В случае согласия:",
                "Copyable": false
              },
              {
                "Text": "do В медицинской сумке лежит кейс с прибором \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "me достал кейс, открыл его и вытащил прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say При освидетельствовании будет использован прибор \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "do На устройстве можно заметить пломбу.",
                "Copyable": true
              },
              {
                "Text": "todo Пломба на приборе присутствует*показав пломбу гражданину",
                "Copyable": true
              },
              {
                "Text": "say Прибор прошел сертификацию, исправен и полностью готов к работе.",
                "Copyable": true
              },
              {
                "Text": "do В медицинской сумке лежит сумочка с мундштуками.",
                "Copyable": true
              },
              {
                "Text": "me достал один запечатанный мундштук",
                "Copyable": true
              },
              {
                "Text": "say При Вас вскрываю новый мундштук",
                "Copyable": true
              },
              {
                "Text": "me вскрыл мундштук и вставил в прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say Выполним контрольный забор воздуха.",
                "Copyable": true
              },
              {
                "Text": "me выполнил контрольный забор воздуха на приборе",
                "Copyable": true
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор готов к работе. Пожалуйста, дыхните.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Предлагаем пройти медицинское освидетельствование через радиальное меню [TAB]",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения ниже 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор показал допустимое значение в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "Продолжаем проверку",
                "Copyable": false
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения выше 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в [x] промилле.",
                "Copyable": true
              },
              {
                "Text": "say Результат — [x] промилле. У Вас в крови обнаружена недопустимая концентрация алкоголя. В выдаче медицинской карты отказано.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "say Перейдем к проверке Вашего психологического состояния.",
                "Copyable": true
              },
              {
                "Text": "say Что такое DM?",
                "Copyable": true
              },
              {
                "Text": "say Присядьте.",
                "Copyable": true
              },
              {
                "Text": "b Вставайте, перейдем к следующему этапу.",
                "Copyable": true
              },
              {
                "Text": "say Вставайте.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "do Компьютер напротив включён.",
                "Copyable": true
              },
              {
                "Text": "do На компьютере запущена медицинская база.",
                "Copyable": true
              },
              {
                "Text": "me начал искать медицинскую карту гражданина в медицинской базе",
                "Copyable": true
              },
              {
                "Text": "do Рядом с компьютером стоит принтер.",
                "Copyable": true
              },
              {
                "Text": "me нашёл медицинскую карту гражданина и отправил её на печать",
                "Copyable": true
              },
              {
                "Text": "do Принтер напечатал медицинскую карту.",
                "Copyable": true
              },
              {
                "Text": "me взял из принтера медицинскую карту",
                "Copyable": true
              },
              {
                "Text": "todo Держите, Ваша медицинская карта*передав медицинскую карту человеку напротив",
                "Copyable": true
              },
              {
                "Text": "say Не забудьте забрать свой паспорт.",
                "Copyable": true
              },
              {
                "Text": "Прощаемся с ним",
                "Copyable": false
              }
            ]
          }
        ]
      },
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 154
26.09.2025, 22:57  [ТС]
JSON
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
      {
        "Text": "Обследования",
        "Data": [
          {
            "Text": "Выдача мед.карты",
            "Data": [
              {
                "Text": "Идёте туда, где есть компьютеры(кроме процедурных)",
                "Copyable": false
              },
              {
                "Text": "say Пожалуйста, положите Ваш паспорт на стол в открытом виде.",
                "Copyable": true
              },
              {
                "Text": "Ждём отыгровок",
                "Copyable": false
              },
              {
                "Text": "me изучил паспорт",
                "Copyable": true
              },
              {
                "Text": "say Для получения медицинской карты необходимо пройти проверку на наличие алкоголя в крови, Вы согласны?",
                "Copyable": true
              },
              {
                "Text": "В случае отказа:",
                "Copyable": false
              },
              {
                "Text": "say Вам отказано в выдаче медицинской карты.",
                "Copyable": true
              },
              {
                "Text": "В случае согласия:",
                "Copyable": false
              },
              {
                "Text": "do В медицинской сумке лежит кейс с прибором \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "me достал кейс, открыл его и вытащил прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say При освидетельствовании будет использован прибор \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "do На устройстве можно заметить пломбу.",
                "Copyable": true
              },
              {
                "Text": "todo Пломба на приборе присутствует*показав пломбу гражданину",
                "Copyable": true
              },
              {
                "Text": "say Прибор прошел сертификацию, исправен и полностью готов к работе.",
                "Copyable": true
              },
              {
                "Text": "do В медицинской сумке лежит сумочка с мундштуками.",
                "Copyable": true
              },
              {
                "Text": "me достал один запечатанный мундштук",
                "Copyable": true
              },
              {
                "Text": "say При Вас вскрываю новый мундштук",
                "Copyable": true
              },
              {
                "Text": "me вскрыл мундштук и вставил в прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say Выполним контрольный забор воздуха.",
                "Copyable": true
              },
              {
                "Text": "me выполнил контрольный забор воздуха на приборе",
                "Copyable": true
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор готов к работе. Пожалуйста, дыхните.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Предлагаем пройти медицинское освидетельствование через радиальное меню [TAB]",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения ниже 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор показал допустимое значение в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "Продолжаем проверку",
                "Copyable": false
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения выше 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в [x] промилле.",
                "Copyable": true
              },
              {
                "Text": "say Результат — [x] промилле. У Вас в крови обнаружена недопустимая концентрация алкоголя. В выдаче медицинской карты отказано.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "say Перейдем к проверке Вашего психологического состояния.",
                "Copyable": true
              },
              {
                "Text": "say Что такое DM?",
                "Copyable": true
              },
              {
                "Text": "say Присядьте.",
                "Copyable": true
              },
              {
                "Text": "b Вставайте, перейдем к следующему этапу.",
                "Copyable": true
              },
              {
                "Text": "say Вставайте.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "do Компьютер напротив включён.",
                "Copyable": true
              },
              {
                "Text": "do На компьютере запущена медицинская база.",
                "Copyable": true
              },
              {
                "Text": "me начал искать медицинскую карту гражданина в медицинской базе",
                "Copyable": true
              },
              {
                "Text": "do Рядом с компьютером стоит принтер.",
                "Copyable": true
              },
              {
                "Text": "me нашёл медицинскую карту гражданина и отправил её на печать",
                "Copyable": true
              },
              {
                "Text": "do Принтер напечатал медицинскую карту.",
                "Copyable": true
              },
              {
                "Text": "me взял из принтера медицинскую карту",
                "Copyable": true
              },
              {
                "Text": "todo Держите, Ваша медицинская карта*передав медицинскую карту человеку напротив",
                "Copyable": true
              },
              {
                "Text": "say Не забудьте забрать свой паспорт.",
                "Copyable": true
              },
              {
                "Text": "Прощаемся с ним",
                "Copyable": false
              }
            ]
          }
        ]
      },
{
        "Text": "ПМП",
        "Data": [
          {
            "Text": "Выдача мед.карты",
            "Data": [
              {
                "Text": "Идёте туда, где есть компьютеры(кроме процедурных)",
                "Copyable": false
              },
              {
                "Text": "say Пожалуйста, положите Ваш паспорт на стол в открытом виде.",
                "Copyable": true
              },
              {
                "Text": "Ждём отыгровок",
                "Copyable": false
              },
              {
                "Text": "me изучил паспорт",
                "Copyable": true
              },
              {
                "Text": "say Для получения медицинской карты необходимо пройти проверку на наличие алкоголя в крови, Вы согласны?",
                "Copyable": true
              },
              {
                "Text": "В случае отказа:",
                "Copyable": false
              },
              {
                "Text": "say Вам отказано в выдаче медицинской карты.",
                "Copyable": true
              },
              {
                "Text": "В случае согласия:",
                "Copyable": false
              },
              {
                "Text": "do В медицинской сумке лежит кейс с прибором \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "me достал кейс, открыл его и вытащил прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say При освидетельствовании будет использован прибор \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "do На устройстве можно заметить пломбу.",
                "Copyable": true
              },
              {
                "Text": "todo Пломба на приборе присутствует*показав пломбу гражданину",
                "Copyable": true
              },
              {
                "Text": "say Прибор прошел сертификацию, исправен и полностью готов к работе.",
                "Copyable": true
              },
              {
                "Text": "do В медицинской сумке лежит сумочка с мундштуками.",
                "Copyable": true
              },
              {
                "Text": "me достал один запечатанный мундштук",
                "Copyable": true
              },
              {
                "Text": "say При Вас вскрываю новый мундштук",
                "Copyable": true
              },
              {
                "Text": "me вскрыл мундштук и вставил в прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say Выполним контрольный забор воздуха.",
                "Copyable": true
              },
              {
                "Text": "me выполнил контрольный забор воздуха на приборе",
                "Copyable": true
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор готов к работе. Пожалуйста, дыхните.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Предлагаем пройти медицинское освидетельствование через радиальное меню [TAB]",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения ниже 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор показал допустимое значение в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "Продолжаем проверку",
                "Copyable": false
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения выше 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в [x] промилле.",
                "Copyable": true
              },
              {
                "Text": "say Результат — [x] промилле. У Вас в крови обнаружена недопустимая концентрация алкоголя. В выдаче медицинской карты отказано.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "say Перейдем к проверке Вашего психологического состояния.",
                "Copyable": true
              },
              {
                "Text": "say Что такое DM?",
                "Copyable": true
              },
              {
                "Text": "say Присядьте.",
                "Copyable": true
              },
              {
                "Text": "b Вставайте, перейдем к следующему этапу.",
                "Copyable": true
              },
              {
                "Text": "say Вставайте.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "do Компьютер напротив включён.",
                "Copyable": true
              },
              {
                "Text": "do На компьютере запущена медицинская база.",
                "Copyable": true
              },
              {
                "Text": "me начал искать медицинскую карту гражданина в медицинской базе",
                "Copyable": true
              },
              {
                "Text": "do Рядом с компьютером стоит принтер.",
                "Copyable": true
              },
              {
                "Text": "me нашёл медицинскую карту гражданина и отправил её на печать",
                "Copyable": true
              },
              {
                "Text": "do Принтер напечатал медицинскую карту.",
                "Copyable": true
              },
              {
                "Text": "me взял из принтера медицинскую карту",
                "Copyable": true
              },
              {
                "Text": "todo Держите, Ваша медицинская карта*передав медицинскую карту человеку напротив",
                "Copyable": true
              },
              {
                "Text": "say Не забудьте забрать свой паспорт.",
                "Copyable": true
              },
              {
                "Text": "Прощаемся с ним",
                "Copyable": false
              }
            ]
          }
        ]
      },
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 154
26.09.2025, 22:58  [ТС]
JSON
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
      {
        "Text": "Прививки",
        "Data": [
          {
            "Text": "Выдача мед.карты",
            "Data": [
              {
                "Text": "Идёте туда, где есть компьютеры(кроме процедурных)",
                "Copyable": false
              },
              {
                "Text": "say Пожалуйста, положите Ваш паспорт на стол в открытом виде.",
                "Copyable": true
              },
              {
                "Text": "Ждём отыгровок",
                "Copyable": false
              },
              {
                "Text": "me изучил паспорт",
                "Copyable": true
              },
              {
                "Text": "say Для получения медицинской карты необходимо пройти проверку на наличие алкоголя в крови, Вы согласны?",
                "Copyable": true
              },
              {
                "Text": "В случае отказа:",
                "Copyable": false
              },
              {
                "Text": "say Вам отказано в выдаче медицинской карты.",
                "Copyable": true
              },
              {
                "Text": "В случае согласия:",
                "Copyable": false
              },
              {
                "Text": "do В медицинской сумке лежит кейс с прибором \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "me достал кейс, открыл его и вытащил прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say При освидетельствовании будет использован прибор \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "do На устройстве можно заметить пломбу.",
                "Copyable": true
              },
              {
                "Text": "todo Пломба на приборе присутствует*показав пломбу гражданину",
                "Copyable": true
              },
              {
                "Text": "say Прибор прошел сертификацию, исправен и полностью готов к работе.",
                "Copyable": true
              },
              {
                "Text": "do В медицинской сумке лежит сумочка с мундштуками.",
                "Copyable": true
              },
              {
                "Text": "me достал один запечатанный мундштук",
                "Copyable": true
              },
              {
                "Text": "say При Вас вскрываю новый мундштук",
                "Copyable": true
              },
              {
                "Text": "me вскрыл мундштук и вставил в прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say Выполним контрольный забор воздуха.",
                "Copyable": true
              },
              {
                "Text": "me выполнил контрольный забор воздуха на приборе",
                "Copyable": true
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор готов к работе. Пожалуйста, дыхните.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Предлагаем пройти медицинское освидетельствование через радиальное меню [TAB]",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения ниже 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор показал допустимое значение в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "Продолжаем проверку",
                "Copyable": false
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения выше 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в [x] промилле.",
                "Copyable": true
              },
              {
                "Text": "say Результат — [x] промилле. У Вас в крови обнаружена недопустимая концентрация алкоголя. В выдаче медицинской карты отказано.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "say Перейдем к проверке Вашего психологического состояния.",
                "Copyable": true
              },
              {
                "Text": "say Что такое DM?",
                "Copyable": true
              },
              {
                "Text": "say Присядьте.",
                "Copyable": true
              },
              {
                "Text": "b Вставайте, перейдем к следующему этапу.",
                "Copyable": true
              },
              {
                "Text": "say Вставайте.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "do Компьютер напротив включён.",
                "Copyable": true
              },
              {
                "Text": "do На компьютере запущена медицинская база.",
                "Copyable": true
              },
              {
                "Text": "me начал искать медицинскую карту гражданина в медицинской базе",
                "Copyable": true
              },
              {
                "Text": "do Рядом с компьютером стоит принтер.",
                "Copyable": true
              },
              {
                "Text": "me нашёл медицинскую карту гражданина и отправил её на печать",
                "Copyable": true
              },
              {
                "Text": "do Принтер напечатал медицинскую карту.",
                "Copyable": true
              },
              {
                "Text": "me взял из принтера медицинскую карту",
                "Copyable": true
              },
              {
                "Text": "todo Держите, Ваша медицинская карта*передав медицинскую карту человеку напротив",
                "Copyable": true
              },
              {
                "Text": "say Не забудьте забрать свой паспорт.",
                "Copyable": true
              },
              {
                "Text": "Прощаемся с ним",
                "Copyable": false
              }
            ]
              }
            ]                                          
},
Добавлено через 31 секунду
JSON
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
              {
        "Text": "Процедуры",
        "Data": [
          {
            "Text": "Выдача мед.карты",
            "Data": [
              {
                "Text": "Идёте туда, где есть компьютеры(кроме процедурных)",
                "Copyable": false
              },
              {
                "Text": "say Пожалуйста, положите Ваш паспорт на стол в открытом виде.",
                "Copyable": true
              },
              {
                "Text": "Ждём отыгровок",
                "Copyable": false
              },
              {
                "Text": "me изучил паспорт",
                "Copyable": true
              },
              {
                "Text": "say Для получения медицинской карты необходимо пройти проверку на наличие алкоголя в крови, Вы согласны?",
                "Copyable": true
              },
              {
                "Text": "В случае отказа:",
                "Copyable": false
              },
              {
                "Text": "say Вам отказано в выдаче медицинской карты.",
                "Copyable": true
              },
              {
                "Text": "В случае согласия:",
                "Copyable": false
              },
              {
                "Text": "do В медицинской сумке лежит кейс с прибором \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "me достал кейс, открыл его и вытащил прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say При освидетельствовании будет использован прибор \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "do На устройстве можно заметить пломбу.",
                "Copyable": true
              },
              {
                "Text": "todo Пломба на приборе присутствует*показав пломбу гражданину",
                "Copyable": true
              },
              {
                "Text": "say Прибор прошел сертификацию, исправен и полностью готов к работе.",
                "Copyable": true
              },
              {
                "Text": "do В медицинской сумке лежит сумочка с мундштуками.",
                "Copyable": true
              },
              {
                "Text": "me достал один запечатанный мундштук",
                "Copyable": true
              },
              {
                "Text": "say При Вас вскрываю новый мундштук",
                "Copyable": true
              },
              {
                "Text": "me вскрыл мундштук и вставил в прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say Выполним контрольный забор воздуха.",
                "Copyable": true
              },
              {
                "Text": "me выполнил контрольный забор воздуха на приборе",
                "Copyable": true
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор готов к работе. Пожалуйста, дыхните.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Предлагаем пройти медицинское освидетельствование через радиальное меню [TAB]",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения ниже 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор показал допустимое значение в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "Продолжаем проверку",
                "Copyable": false
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения выше 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в [x] промилле.",
                "Copyable": true
              },
              {
                "Text": "say Результат — [x] промилле. У Вас в крови обнаружена недопустимая концентрация алкоголя. В выдаче медицинской карты отказано.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "say Перейдем к проверке Вашего психологического состояния.",
                "Copyable": true
              },
              {
                "Text": "say Что такое DM?",
                "Copyable": true
              },
              {
                "Text": "say Присядьте.",
                "Copyable": true
              },
              {
                "Text": "b Вставайте, перейдем к следующему этапу.",
                "Copyable": true
              },
              {
                "Text": "say Вставайте.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "do Компьютер напротив включён.",
                "Copyable": true
              },
              {
                "Text": "do На компьютере запущена медицинская база.",
                "Copyable": true
              },
              {
                "Text": "me начал искать медицинскую карту гражданина в медицинской базе",
                "Copyable": true
              },
              {
                "Text": "do Рядом с компьютером стоит принтер.",
                "Copyable": true
              },
              {
                "Text": "me нашёл медицинскую карту гражданина и отправил её на печать",
                "Copyable": true
              },
              {
                "Text": "do Принтер напечатал медицинскую карту.",
                "Copyable": true
              },
              {
                "Text": "me взял из принтера медицинскую карту",
                "Copyable": true
              },
              {
                "Text": "todo Держите, Ваша медицинская карта*передав медицинскую карту человеку напротив",
                "Copyable": true
              },
              {
                "Text": "say Не забудьте забрать свой паспорт.",
                "Copyable": true
              },
              {
                "Text": "Прощаемся с ним",
                "Copyable": false
              }
            ]
              }
            ]                                          
},
0
3 / 3 / 2
Регистрация: 07.03.2024
Сообщений: 154
26.09.2025, 22:58  [ТС]
JSON
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
              {
        "Text": "Операции",
        "Data": [
          {
            "Text": "Выдача мед.карты",
            "Data": [
              {
                "Text": "Идёте туда, где есть компьютеры(кроме процедурных)",
                "Copyable": false
              },
              {
                "Text": "say Пожалуйста, положите Ваш паспорт на стол в открытом виде.",
                "Copyable": true
              },
              {
                "Text": "Ждём отыгровок",
                "Copyable": false
              },
              {
                "Text": "me изучил паспорт",
                "Copyable": true
              },
              {
                "Text": "say Для получения медицинской карты необходимо пройти проверку на наличие алкоголя в крови, Вы согласны?",
                "Copyable": true
              },
              {
                "Text": "В случае отказа:",
                "Copyable": false
              },
              {
                "Text": "say Вам отказано в выдаче медицинской карты.",
                "Copyable": true
              },
              {
                "Text": "В случае согласия:",
                "Copyable": false
              },
              {
                "Text": "do В медицинской сумке лежит кейс с прибором \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "me достал кейс, открыл его и вытащил прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say При освидетельствовании будет использован прибор \"Drager\".",
                "Copyable": true
              },
              {
                "Text": "do На устройстве можно заметить пломбу.",
                "Copyable": true
              },
              {
                "Text": "todo Пломба на приборе присутствует*показав пломбу гражданину",
                "Copyable": true
              },
              {
                "Text": "say Прибор прошел сертификацию, исправен и полностью готов к работе.",
                "Copyable": true
              },
              {
                "Text": "do В медицинской сумке лежит сумочка с мундштуками.",
                "Copyable": true
              },
              {
                "Text": "me достал один запечатанный мундштук",
                "Copyable": true
              },
              {
                "Text": "say При Вас вскрываю новый мундштук",
                "Copyable": true
              },
              {
                "Text": "me вскрыл мундштук и вставил в прибор \"Drager\"",
                "Copyable": true
              },
              {
                "Text": "say Выполним контрольный забор воздуха.",
                "Copyable": true
              },
              {
                "Text": "me выполнил контрольный забор воздуха на приборе",
                "Copyable": true
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор готов к работе. Пожалуйста, дыхните.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Предлагаем пройти медицинское освидетельствование через радиальное меню [TAB]",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения ниже 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "say Прибор показал допустимое значение в 0.0 промилле.",
                "Copyable": true
              },
              {
                "Text": "Продолжаем проверку",
                "Copyable": false
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "Если прибор показал уровень опьянения выше 0.3 промилле:",
                "Copyable": false
              },
              {
                "Text": "do Прибор показал результат в [x] промилле.",
                "Copyable": true
              },
              {
                "Text": "say Результат — [x] промилле. У Вас в крови обнаружена недопустимая концентрация алкоголя. В выдаче медицинской карты отказано.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "say Перейдем к проверке Вашего психологического состояния.",
                "Copyable": true
              },
              {
                "Text": "say Что такое DM?",
                "Copyable": true
              },
              {
                "Text": "say Присядьте.",
                "Copyable": true
              },
              {
                "Text": "b Вставайте, перейдем к следующему этапу.",
                "Copyable": true
              },
              {
                "Text": "say Вставайте.",
                "Copyable": true
              },
              {
                "Text": "",
                "Copyable": false
              },
              {
                "Text": "do Компьютер напротив включён.",
                "Copyable": true
              },
              {
                "Text": "do На компьютере запущена медицинская база.",
                "Copyable": true
              },
              {
                "Text": "me начал искать медицинскую карту гражданина в медицинской базе",
                "Copyable": true
              },
              {
                "Text": "do Рядом с компьютером стоит принтер.",
                "Copyable": true
              },
              {
                "Text": "me нашёл медицинскую карту гражданина и отправил её на печать",
                "Copyable": true
              },
              {
                "Text": "do Принтер напечатал медицинскую карту.",
                "Copyable": true
              },
              {
                "Text": "me взял из принтера медицинскую карту",
                "Copyable": true
              },
              {
                "Text": "todo Держите, Ваша медицинская карта*передав медицинскую карту человеку напротив",
                "Copyable": true
              },
              {
                "Text": "say Не забудьте забрать свой паспорт.",
                "Copyable": true
              },
              {
                "Text": "Прощаемся с ним",
                "Copyable": false
              }
            ]
              }
            ]
              }
            ]
  },
  {
    "Text": "Menu2",
    "Data": [
      {
        "Text": "SubMenu21",
        "Data": [
          {
            "Text": "SubSubMenu211",
            "Data": [
              {
                "Text": "7111",
                "Copyable": true
              },
              {
                "Text": "7111",
                "Copyable": true
              }
            ]
          },
          {
            "Text": "SubSubMenu212",
            "Data": [
              {
                "Text": "77111",
                "Copyable": true
              },
              {
                "Text": "77111",
                "Copyable": true
              }
            ]
          }
        ]
      },
      {
        "Text": "SubMenu22",
        "Data": [
          {
            "Text": "SubSubMenu221",
            "Data": [
              {
                "Text": "7111",
                "Copyable": true
              },
              {
                "Text": "7111",
                "Copyable": true
              }
            ]
          },
          {
            "Text": "SubSubMenu222",
            "Data": [
              {
                "Text": "77111",
                "Copyable": true
              },
              {
                "Text": "77111",
                "Copyable": true
              }
            ]
          }
        ]
      },
      {
        "Text": "SubMenu23",
        "Data": [
          {
            "Text": "SubSubMenu231",
            "Data": [
              {
                "Text": "7111",
                "Copyable": true
              },
              {
                "Text": "7111",
                "Copyable": true
              }
            ]
          },
          {
            "Text": "SubSubMenu232",
            "Data": [
              {
                "Text": "77111",
                "Copyable": true
              },
              {
                "Text": "77111",
                "Copyable": true
              }
            ]
          }
        ]
      }
    ]
  },
  {
    "Text": "Menu3",
    "Data": [
      {
        "Text": "SubMenu31",
        "Data": [
          {
            "Text": "SubSubMenu311",
            "Data": [
              {
                "Text": "7111",
                "Copyable": true
              },
              {
                "Text": "7111",
                "Copyable": true
              }
            ]
          },
          {
            "Text": "SubSubMenu312",
            "Data": [
              {
                "Text": "77111",
                "Copyable": true
              },
              {
                "Text": "77111",
                "Copyable": true
              }
            ]
          }
        ]
      },
      {
        "Text": "SubMenu32",
        "Data": [
          {
            "Text": "SubSubMenu321",
            "Data": [
              {
                "Text": "7111",
                "Copyable": true
              },
              {
                "Text": "7111",
                "Copyable": true
              }
            ]
          },
          {
            "Text": "SubSubMenu322",
            "Data": [
              {
                "Text": "77111",
                "Copyable": true
              },
              {
                "Text": "77111",
                "Copyable": true
              }
            ]
          }
        ]
      },
      {
        "Text": "SubMenu33",
        "Data": [
          {
            "Text": "SubSubMenu331",
            "Data": [
              {
                "Text": "7111",
                "Copyable": true
              },
              {
                "Text": "7111",
                "Copyable": true
              },
              {
                "Text": "New Item",
                "Copyable": false
              }
            ]
          },
          {
            "Text": "New Item",
            "Data": [
              {
                "Text": "New Item",
                "Copyable": true
              }
            ]
          }
        ]
      }
    ]
  }
]
}
]
Добавлено через 27 секунд
Больше 15.000 символов не дает за раз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2025, 22:58

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
49
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru