Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для NiceGuyEddy
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383

Первые шаги WinForm

03.09.2010, 11:34. Показов 1539. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем пятничного утра!

В процессе изучения(который только начался) C# набросал программку. Она заполняет рандомно группы лиги чемпионов (нравится мне футбол) из 32 команд. Один TextBox - одна команда. Также "прикручен" гимн ЛЧ =).
Вопрос, а точнее просьба в заключается в следующем: Оцените, пожалуйста, код. Приму к сведению любую критику, в особенности касаемо структуры. Может можно как-то было проще намного все сделать?

В планах сделать вывод "шахматки" игр в файл, скорее в .xls. Подскажите откуда начать копать с экспортом данных из TextBox'ов в файл Excel.

Заранее спасибо!
Вот, собственно, код:

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
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
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;
using System.Media;
using System.Threading;
using System.IO;
 
namespace ChLeague
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        List<string> clubs = new List<string>(){"Man. United","Valencia","Rangers","Buraspor","Barcelona",
                          "Panathinaikos","Kobenhavn","Rubin Kazan","Bayern","Roma",
                          "Basel","CFR Cluj","Chelsea","Marseille","Spartak Moscow","Zilina",
                          "AC Milan","Real Madrid","Ajax","Auxerre","Shakhtar Donetsk","Braga",
                          "Partizan","Internazionale","Bremen","Tottenham","Twente",
                          "Lyon","Benfica","Shalke","H. Tel-Aviv","Arsenal"};
 
        string[] clubtemp = {"Man. United","Valencia","Rangers","Buraspor","Barcelona",
                          "Panathinaikos","Kobenhavn","Rubin Kazan","Bayern","Roma",
                          "Basel","CFR Cluj","Chelsea","Marseille","Spartak Moscow","Zilina",
                          "AC Milan","Real Madrid","Ajax","Auxerre","Shakhtar Donetsk","Braga",
                          "Partizan","Internazionale","Bremen","Tottenham","Twente",
                          "Lyon","Benfica","Shalke","H. Tel-Aviv","Arsenal"};
 
        string perem = string.Empty.ToString();
        int x = 0;
        Random rnd = new Random();
 
        private void buttonA_Click(object sender, EventArgs e)
        {
            if (GroupA1.Text != string.Empty.ToString() & GroupA2.Text != string.Empty.ToString() & GroupA3.Text != string.Empty.ToString() & GroupA4.Text != string.Empty.ToString())
            {
                MessageBox.Show("Все поля заполнены!");
            }
            for (int i = 0; i < 4; i++)
            {
                if (GroupA1.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupA1.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupA2.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupA2.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupA3.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupA3.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupA4.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupA4.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
            }
            textBox1.Text = string.Empty.ToString();
            for (int i = 0; i < clubs.Count; i++)
            {
                textBox1.AppendText(clubs[i] + Environment.NewLine);
            }
        }
 
        private void buttonB_Click(object sender, EventArgs e)
        {
            if (GroupB1.Text != string.Empty.ToString() & GroupA2.Text != string.Empty.ToString() & GroupA3.Text != string.Empty.ToString() & GroupA4.Text != string.Empty.ToString())
            {
                MessageBox.Show("Все поля заполнены!");
            }
            for (int i = 0; i < 4; i++)
            {
                if (GroupB1.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupB1.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupB2.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupB2.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupB3.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupB3.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupB4.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupB4.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
            }
            textBox1.Text = string.Empty.ToString();
            for (int i = 0; i < clubs.Count; i++)
            {
                textBox1.AppendText(clubs[i] + Environment.NewLine);
            }
        }
 
        private void buttonC_Click(object sender, EventArgs e)
        {
            if (GroupC1.Text != string.Empty.ToString() & GroupA2.Text != string.Empty.ToString() & GroupA3.Text != string.Empty.ToString() & GroupA4.Text != string.Empty.ToString())
            {
                MessageBox.Show("Все поля заполнены!");
            }
            for (int i = 0; i < 4; i++)
            {
                if (GroupC1.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupC1.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupC2.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupC2.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupC3.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupC3.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupC4.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupC4.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
            }
            textBox1.Text = string.Empty.ToString();
            for (int i = 0; i < clubs.Count; i++)
            {
                textBox1.AppendText(clubs[i] + Environment.NewLine);
            }
        }
 
        private void buttonD_Click(object sender, EventArgs e)
        {
            if (GroupD1.Text != string.Empty.ToString() & GroupA2.Text != string.Empty.ToString() & GroupA3.Text != string.Empty.ToString() & GroupA4.Text != string.Empty.ToString())
            {
                MessageBox.Show("Все поля заполнены!");
            }
            for (int i = 0; i < 4; i++)
            {
                if (GroupD1.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupD1.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupD2.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupD2.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupD3.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupD3.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupD4.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupD4.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
            }
            textBox1.Text = string.Empty.ToString();
            for (int i = 0; i < clubs.Count; i++)
            {
                textBox1.AppendText(clubs[i] + Environment.NewLine);
            }
        }
 
        private void buttonE_Click(object sender, EventArgs e)
        {
            if (GroupE1.Text != string.Empty.ToString() & GroupE2.Text != string.Empty.ToString() & GroupE3.Text != string.Empty.ToString() & GroupE4.Text != string.Empty.ToString())
            {
                MessageBox.Show("Все поля заполнены!");
            }
            for (int i = 0; i < 4; i++)
            {
                if (GroupE1.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupE1.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupE2.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupE2.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupE3.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupE3.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupE4.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupE4.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
            }
            textBox1.Text = string.Empty.ToString();
            for (int i = 0; i < clubs.Count; i++)
            {
                textBox1.AppendText(clubs[i] + Environment.NewLine);
            }
        }
 
        private void buttonF_Click(object sender, EventArgs e)
        {
            if (GroupF1.Text != string.Empty.ToString() & GroupF2.Text != string.Empty.ToString() & GroupF3.Text != string.Empty.ToString() & GroupF4.Text != string.Empty.ToString())
            {
                MessageBox.Show("Все поля заполнены!");
            }
            for (int i = 0; i < 4; i++)
            {
                if (GroupF1.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupF1.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupF2.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupF2.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupF3.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupF3.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupF4.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupF4.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
            }
            textBox1.Text = string.Empty.ToString();
            for (int i = 0; i < clubs.Count; i++)
            {
                textBox1.AppendText(clubs[i] + Environment.NewLine);
            }
        }
 
        private void buttonG_Click(object sender, EventArgs e)
        {
            if (GroupG1.Text != string.Empty.ToString() & GroupG2.Text != string.Empty.ToString() & GroupG3.Text != string.Empty.ToString() & GroupG4.Text != string.Empty.ToString())
            {
                MessageBox.Show("Все поля заполнены!");
            }
            for (int i = 0; i < 4; i++)
            {
                if (GroupG1.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupG1.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupG2.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupG2.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupG3.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupG3.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupG4.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupG4.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
            }
            textBox1.Text = string.Empty.ToString();
            for (int i = 0; i < clubs.Count; i++)
            {
                textBox1.AppendText(clubs[i] + Environment.NewLine);
            }
        }
 
        private void buttonH_Click(object sender, EventArgs e)
        {
            if (GroupH1.Text != string.Empty.ToString() & GroupH2.Text != string.Empty.ToString() & GroupH3.Text != string.Empty.ToString() & GroupH4.Text != string.Empty.ToString())
            {
                MessageBox.Show("Все поля заполнены!");
            }
            for (int i = 0; i < 4; i++)
            {
                if (GroupH1.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupH1.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupH2.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupH2.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupH3.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupH3.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
                else if (GroupH4.Text == string.Empty.ToString())
                {
                    x = rnd.Next(0, clubs.Count);
                    GroupH4.AppendText(clubs[x]);
                    clubs.Remove(clubs[x]);
                }
            }
            textBox1.Text = string.Empty.ToString();
            for (int i = 0; i < clubs.Count; i++)
            {
                textBox1.AppendText(clubs[i] + Environment.NewLine);
            }
        }        
 
        private void ClearAllFields_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Пока что не работает", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Stop);
        }
 
        private void RefreshClubs_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Вы точно хотите обновить таблицу команд?" + Environment.NewLine + "Это приведет к очищению групп и обратному занесению групп в список", "Обновление", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                == DialogResult.Yes)
            {
                foreach (TextBox tB in Controls.OfType<TextBox>())
                {
                    tB.Text = "";
                }
                clubs.Clear();
                for (int i = 0; i < 32; i++)
                {
                    clubs.Add(clubtemp[i]);
                }
            }
            //MessageBox.Show("Функция в разработке =)", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Stop);
        }
 
        private void About_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Программа выполняет сортировку клубов лиги чемпионов по группам в случайном порядке".Trim(), "Version 1.0b", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
 
        private void GymnOfLC_Click(object sender, EventArgs e)
        {
            SoundPlayer sp = new SoundPlayer();
            sp.Stream = Properties.Resources.UEFA_gimn_ligi_chempionov;
            sp.Play();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            SoundPlayer sp = new SoundPlayer();
            sp.Stop();
        }
 
private void Exit_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.09.2010, 11:34
Ответы с готовыми решениями:

первые шаги в c#
начал изучать c#.и вот столкнулся с первой проблемой. почем-то программа возводит в степень не то число что я ввел. using System; ...

Первые шаги в ZedGraph
Решил у себя на Студии 2012 запустить код-пример чтобы поэкспериментировать,но сразу пошла ошибка. Добавил ZedGraph через...

Самые первые шаги. Как сделать, чтобы заработало?
Есть программа. Как сделать, чтобы она работала в MS Visual Studio ? Какой пункт выбирать при создании проекта? Там есть всякие консольные...

8
 Аватар для d0s'A
153 / 113 / 25
Регистрация: 23.06.2008
Сообщений: 320
03.09.2010, 11:44
Копать в сторону поисковика. Тут уже не раз обсуждались такие же темы C# + Excel
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
03.09.2010, 11:54
NiceGuyeddy, по поводу Excel: Результаты поиска

Добавлено через 3 минуты
Вот это черезчур:
C#
1
string perem = string.Empty.ToString();
. Не надо лишний раз использовать ToString(); Вы ведь переменной и так даете string значение

Добавлено через 35 секунд
Покажите скриншот программы.

Добавлено через 3 минуты
За место текстбоксов лучше использовать DataGridView. Создать 8 столбцов (по числу групп) и заполнить их соответствующими значениями. Если, конечно, у вас текстбоксы не расположены как-то по особенному.
1
 Аватар для NiceGuyEddy
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383
03.09.2010, 12:06  [ТС]
Цитата Сообщение от kirill29 Посмотреть сообщение
Покажите скриншот программы.
Скрин:
Миниатюры
Первые шаги WinForm  
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
03.09.2010, 12:19
Да, за место 32 текстбоксов имхо лучше использовать 1 dataGridView.
0
 Аватар для NiceGuyEddy
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383
03.09.2010, 12:40  [ТС]
kirill29,
Чтож, попробую dataGridView.
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
03.09.2010, 15:23
если это "первые шаги" лучше не связывайся с гридом, в коде и так полно мест которые можно улучшить

датаГрид это самый сложный контрол во всем винформс, чтоб описать его полностью потребуется цела книга =)
2
(x(x_(x_x(О_о)x_x)_x)x)
 Аватар для Athlon_33_88
64 / 56 / 6
Регистрация: 04.09.2010
Сообщений: 301
04.09.2010, 16:37
Код достойный,но можно сократить его,и немного переделать логику,что отразиться на быстродействии (напримемер убрать ненужные using)
1
 Аватар для NiceGuyEddy
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383
04.09.2010, 20:28  [ТС]
Благодарен всем! Прислушаюсь к советам. Тему можно закрывать, я считаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.09.2010, 20:28
Помогаю со студенческими работами здесь

Первые шаги в Code first entity framework
С добрым днём! Попытался создать пробный проект (VS 2010, EF 4.1). Вроде всё пошло, но почему-то генериться исключение...

Программирование игры, первые шаги, прошу совета
Вообщем решил попробовать себя в создании игры, так как мой профильный язык C# решил выбрать его, работаю с Microsoft Visual Studio 2010,...

C++ первые шаги (абсолютно первые)
Привет, пользователи CyberForum. Я относительно давний юзер этого форума, и вот, наконец-то решил воплощать мечту в реальность, а именно...

Первые шаги
Собственно первый день в среде PHP. Пойму если ответы будут &quot;для лузера&quot; =) Когда пишем свое имя, нас перенаправляют в hiUser.php. По...

Первые шаги
Купил себе Робопика , да только не хочет он выполнять программу из брошурки , выглядит она так: #ymstude&lt;motor.h&gt; void main() ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru