Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21

Как обойтись без невидимых списков?

14.02.2016, 06:51. Показов 1244. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте.

пишу один проект на C#.
ниже приведу код а потом вопрос.

C#
1
2
3
4
5
6
7
8
                    var AudioList = Audio.Search(textBox1.Text, out totalCount);
foreach (var audio in AudioList)
                {
                    listBox1.Items.Add(audio.Artist + " - " + audio.Title);
                    listBox2.Items.Add(audio.Url.ToString());
                    listBox3.Items.Add(audio.Id);
                    listBox4.Items.Add(audio.OwnerId);
}
я незнал как это можно сделать и создал один видимый список и три невидимых и потом менял индексы основываясь на выборе видимого, но это не точно и есть много дубликата.
мне в функциях нужны соответственно artist, title, url, id, ownerid в соответствии выбранного индекса в списке.
как можно обойтись без невидимых списков?

спасибо заранее за помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2016, 06:51
Ответы с готовыми решениями:

Как обойтись без вложенного цикла?
Нужно в данном конкретном случае перебрать, например, все возможные комбинации символов цепочки из нулей и единиц. Но! Нужно обойтись без...

Как обойтись без сиаиков в библиотеках
Я вот сделал библиотеку dll и сделал ссылку и подключил в using И у классов стоит public class Но при обращении к функциям...

Мессенджер: можно ли обойтись без БД
Здравствуйте, я сейчас занимаюсь разработкой, пока что архитектуры, мессенджера. Я как-то слышал, что для пересылки сообщений используют...

28
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 07:02
Вам поможет привязка данных (DataBinging). Это очень мощный и гибкий инструмент. Вот тут есть неплохая статья на эту тему. Еще на MSDN есть много полезного.
0
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21
14.02.2016, 07:54  [ТС]
можете показать простенький пример?

мне нужно, чтобы в списке отображался только title а остальные artist, id, ownerid, url можно былобы вызвать в других функциях.

спасибо
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 07:58
Я вам привёл ссылки на статьи, в них есть примеры, простые и доступные. Если вам покажутся сложными, то вы всегда сможете найти другие поискав "WinForms ListBox Binding"
0
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21
14.02.2016, 09:25  [ТС]
здравствуйте.

я попробовал сделать databinding, хотя незнаю, правильно или нет.
еще тут есть только display member в котором я могу выводить title и valuemember в котором я могу вывести url.

куда девать остальные свойства?
C#
1
2
3
4
5
6
                    var AudioList = Vk.vk.Audio.Search(textBox1.Text, out totalCount, null, null, null, 300, null);
                foreach (var audio in AudioList)
                {
                    listBox1.DataSource = AudioList;
                    listBox1.DisplayMember = "title";
                    listBox1.ValueMember = "url";
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 11:13
Цитата Сообщение от gozaltech Посмотреть сообщение
куда девать остальные свойства?
В данном случае никуда. ListBox может отображать только одно свойство за раз и это свойство записывается в DisplayMember. Если вам нужно отображать больше одного свойства, то придётся сделать одно из перечисленного:
1. Переопределить событие отрисовки элемента в ListBox и самому рисовать его содержимое. Это не сложно.
2. Использовать ListView, который предоставит вам возможность выводить записи в виде таблицы.
3. Используйте DataGridView. Этот вариант тоже выводит записи в табличной форме, но с ним проще управиться.

Вот пример последнего подхода:

Кликните здесь для просмотра всего текста

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
using System;
using System.Collections.Generic;
using System.Windows.Forms;
 
namespace WindowsFormsExoeriments
{
    public partial class Form1 : Form
    {
        private static List<AudioItem> audioList;
 
        static Form1()
        {
            audioList = new List<AudioItem>()
            {
                new AudioItem { Id = 1, Artist = "Кувалда", Title="Бетономешалка"},
                new AudioItem { Id = 2, Artist = "Мастер", Title="Мы не рабы"},
                new AudioItem { Id = 3, Artist = "FPG", Title="Ночь"}
            };
        }
 
        public Form1()
        {
            InitializeComponent();
 
            bindData();
        }
 
        private void bindData()
        {
            dataGridView1.DataSource = audioList;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
 
    public class AudioItem
    {
        public int Id { get; set; }
        public int OwnerId { get; set; }
        public string Url { get; set; }
        public string Artist { get; set; }
        public string Title { get; set; }
    }
 
}


Выглядит оно так:
Миниатюры
Как обойтись без невидимых списков?  
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 11:28
А вот первый вариант:

Кликните здесь для просмотра всего текста

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
using System;
using System.Collections.Generic;
using System.Windows.Forms;
 
namespace WindowsFormsExoeriments
{
    public partial class Form1 : Form
    {
        private static List<AudioItem> audioList;
 
        static Form1()
        {
            audioList = new List<AudioItem>()
            {
                new AudioItem { Id = 1, Artist = "Кувалда", Title="Бетономешалка"},
                new AudioItem { Id = 2, Artist = "Мастер", Title="Мы не рабы"},
                new AudioItem { Id = 3, Artist = "FPG", Title="Ночь"}
            };
        }
 
        public Form1()
        {
            InitializeComponent();
 
            bindData();
        }
 
        private void bindData()
        {
            listBox1.DataSource = audioList;
            listBox1.DrawMode = DrawMode.OwnerDrawFixed;
            listBox1.DrawItem += ListBox1_DrawItem;
            listBox1.ItemHeight = 60;
        }
 
        private void ListBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.DrawBackground();
 
            e.Graphics.DrawString("ID: " + audioList[e.Index].Id.ToString(), e.Font, System.Drawing.Brushes.Black, 0, e.Bounds.Y + 0);
            e.Graphics.DrawString("Artist: " + audioList[e.Index].Artist, e.Font, System.Drawing.Brushes.Black, 0, e.Bounds.Y + 20);
            e.Graphics.DrawString("Title: " + audioList[e.Index].Title, e.Font, System.Drawing.Brushes.Black, 0, e.Bounds.Y + 40);
 
            e.DrawFocusRectangle();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
 
    public class AudioItem
    {
        public int Id { get; set; }
        public int OwnerId { get; set; }
        public string Url { get; set; }
        public string Artist { get; set; }
        public string Title { get; set; }
    }
 
}


Выглядит о так:
Миниатюры
Как обойтись без невидимых списков?  
0
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21
14.02.2016, 12:54  [ТС]
здравствуйте еще раз.

простите если что-то не понял.

немогу понять, почему не работает так.
C#
1
2
3
4
5
                int totalCount = 300;
                var AudioList = Vk.vk.Audio.Search(textBox1.Text, out totalCount, null, null, null, 300, null);
                listBox1.DataSource = AudioList;
                    listBox1.DisplayMember = "artist + title";;
                    listBox1.ValueMember = "url";
в displaymember отображается только одно поле.
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 13:09
Я же, вроде бы, понятно выразился:
Цитата Сообщение от Usaga Посмотреть сообщение
ListBox может отображать только одно свойство за раз и это свойство записывается в DisplayMember.
Пример как сделать отображение нескольких полей я привел в посте выше.

Есть ещё более простой пример - переопределите метод ToString() класса, который хранится в коллекции AudioList и не задавайте значения свойствам DisplayMember и ValueMember. Тогда у вас будет отображаться тот текст, который вы зададите в методе ToString().
0
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21
14.02.2016, 15:24  [ТС]
простите меня, но все сторания сделать что-то не к чему не приводят.

если можете пожалуйста подсказать в чем дело? буду очень признателен.

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
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
using VkNet;
using VkNet.Enums.Filters;
using NAudio;
using NAudio.Wave;
    
 
namespace gozal_music
{
    public partial class mainForm : Form
    {
public ReadOnlyCollection<VkNet.Model.Attachments.Audio> AudioList;
 
        
        public mainForm()
        {
            InitializeComponent();
        }
 
        private string stringParse(string source, string i)
        {
            try
            {
                string result = string.Empty;
                int pos = 0;
                while (i[pos] != ',')
                {
                    if (pos == 0)
                        pos = i.IndexOf(source) + source.Length + 1;
                    result += i[pos];
                    pos++;
                    if (pos == i.Length)
                        break;
                }
 
                return result;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Oops! Error occured...\nError message: " + ex.Message);
                return string.Empty;
            }
        }
 
 
        
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
switch (e.KeyData)
            {
    case Keys.Enter:
                int totalCount = 300;
                AudioList = Vk.vk.Audio.Search(textBox1.Text, out totalCount, null, null, null, 300, null);
                listBox1.DataSource = AudioList;
                listBox1.DrawMode = DrawMode.OwnerDrawFixed;
                listBox1.DrawItem += listBox1_DrawItem;
* * * * * * listBox1.ItemHeight = 60;
    listBox1.DisplayMember = "title";;
                    listBox1.ValueMember = "url";
                    listBox1.Focus();
                break;
}
        }
 
        private void listBox1_KeyDown_1(object sender, KeyEventArgs e)
        {
            switch (e.KeyData)
            {
    case Keys.Shift|Keys.Enter:
listBox1.ValueMember = "id";
ulong audioid = Convert.ToUInt64(listBox1.SelectedValue);
listBox1.ValueMember = "ownerid";
long ownerid = (long)listBox1.SelectedValue;
Vk.vk.Audio.Add(audioid, ownerid);
break;    
                case Keys.Delete:
listBox1.ValueMember = "id";
                    ulong audioid1 = Convert.ToUInt64(listBox1.SelectedValue);
                    listBox1.ValueMember = "ownerid";
                    long ownerid1 = (long)listBox1.SelectedValue;
                    Vk.vk.Audio.Delete(audioid1, ownerid1);
                    break;
}
        }
 
 
    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        e.DrawBackground();
 
        e.Graphics.DrawString("Artist: " + AudioList[e.Index].Artist, e.Font, System.Drawing.Brushes.Black, 0, e.Bounds.Y + 0);
        e.Graphics.DrawString("Title: " + AudioList[e.Index].Title, e.Font, System.Drawing.Brushes.Black, 0, e.Bounds.Y + 20);
 
        e.DrawFocusRectangle();
 
    }
 
    }
 
    class Audio
    {
        public string Name
        {
            get;
            set;
        }
        public string Url
        {
            get;
            set;
        }
 
    }
 
    public class AudioItem
    {
        public int Id { get; set; }
        public int OwnerId { get; set; }
        public string Url { get; set; }
        public string Artist { get; set; }
        public string Title { get; set; }
    }
 
    public static class Vk
        {
            public static VkApi vk = new VkApi();
        }
 
}
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 15:52
Цитата Сообщение от gozaltech Посмотреть сообщение
что-то не к чему не приводят
Было бы не плохо уточнить, что именно не работает.

По поводу кода. Сразу в глаза бросилась строка listBox1.DrawItem += listBox1_DrawItem; в обработчике события. Такой код при каждом нажатии клавиши будет добавлять по одному обработчику к листбоксу. Перенесите это в конструктор вашей формы.

В методе listBox1_KeyDown_1 вообще вакханалия творится - я даже комментировать такое не хочу... У листбокса есть свойство SelectedIndex, его можно использовать для получения объекта из коллекции AudioList.
0
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21
14.02.2016, 16:43  [ТС]
здравствуйте.

поповоду lisbbox1.keydownevent наверно должно быть так.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private void listBox1_KeyDown_1(object sender, KeyEventArgs e)
        {
            ulong audioid = Convert.ToUInt64(AudioList[listBox1.SelectedIndex].Id);
            long ownerid = (long)AudioList[listBox1.SelectedIndex].OwnerId;
            
            switch (e.KeyData)
            {
    case Keys.Shift|Keys.Enter:
Vk.vk.Audio.Add(audioid, ownerid);
break;    
                case Keys.Delete:
                    Vk.vk.Audio.Delete(audioid, ownerid);
                    break;
}
        }
а поповоду отрисовки листбокса, сделал так
строку listBox1.DrawItem += listBox1_DrawItem;
перенес в public mainForm()


остальная функция выглядит так.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
switch (e.KeyData)
            {
    case Keys.Enter:
                int totalCount = 300;
                AudioList = Vk.vk.Audio.Search(textBox1.Text, out totalCount, null, null, null, 300, null);
                listBox1.DataSource = AudioList;
                listBox1.DrawMode = DrawMode.OwnerDrawFixed;
* * * * * * listBox1.ItemHeight = 60;
    listBox1.DisplayMember = "title";;
                    listBox1.ValueMember = "url";
                    listBox1.Focus();
                break;
}
        }
но почемуто оно не перерисовывается, остается текст из displaymember.
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 17:04
При использовании собственного отрисовщика вам не требуется задавать свойства DisplayMemberи ValueMember. DrawMode меняйте перед ItemDraw += в конструкторе формы.

И что значит "оно не перерисовывается"? При обновлении списка не обновляется контрол? Или что?
0
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21
14.02.2016, 17:19  [ТС]
да, когда задается поиск, вместо того чтобы отобразить исполнителя и названия отображаются цифры.

вот такой текущий код.

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
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
using VkNet;
using VkNet.Enums.Filters;
using NAudio;
using NAudio.Wave;
    
 
namespace gozal_music
{
    public partial class mainForm : Form
    {
private AudioFileReader audioFileReader= null;
private WaveOut waveOut = null;
public ReadOnlyCollection<VkNet.Model.Attachments.Audio> AudioList;
 
        
        public mainForm()
        {
            InitializeComponent();
            listBox1.DrawMode = DrawMode.OwnerDrawFixed;
            listBox1.DrawItem += listBox1_DrawItem;
            listBox1.ItemHeight = 60;
        }
        
    
        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
switch (e.KeyData)
            {
    case Keys.Enter:
                int totalCount = 300;
                AudioList = Vk.vk.Audio.Search(textBox1.Text, out totalCount, null, null, null, 300, null);
                listBox1.DataSource = AudioList;
                    listBox1.Focus();
                break;
}
        }
 
        private void listBox1_KeyDown_1(object sender, KeyEventArgs e)
        {
            ulong audioid = Convert.ToUInt64(AudioList[listBox1.SelectedIndex].Id);
            long ownerid = (long)AudioList[listBox1.SelectedIndex].OwnerId;
            
            switch (e.KeyData)
            {
    case Keys.Shift|Keys.Enter:
Vk.vk.Audio.Add(audioid, ownerid);
break;    
                case Keys.Delete:
                    Vk.vk.Audio.Delete(audioid, ownerid);
                    break;
}
        }
 
 
    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        e.DrawBackground();
        e.Graphics.DrawString("Artist: " + AudioList[e.Index].Artist, e.Font, System.Drawing.Brushes.Black, 0, e.Bounds.Y + 0);
        e.Graphics.DrawString("Title: " + AudioList[e.Index].Title, e.Font, System.Drawing.Brushes.Black, 0, e.Bounds.Y + 20);
        e.DrawFocusRectangle();
    }
 
    }
 
 
    public static class Vk
        {
            public static VkApi vk = new VkApi();
        }
 
}
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 17:36
Строка №43: поставьте на ней "точку останова" (breakpoint), потом наведите курсор мыши на переменную AudioList и изучите его содержимое. Сдаётся мне, что вам уже в коллекции что-то не то приходит. Если же там всё нормально, то приведите скриншот того, что вы видите.
0
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21
14.02.2016, 18:07  [ТС]
ксожалению отладчик плохо озвучивается в студии для програм экранного доступа.
я попробовал сделать скрин
https://onedrive.live.com/redi... hoto%2cpng
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 18:17
К сожалению скриншот вышел неудачно - ничего полезного он не отобразил.

Попробуем "колхозный" вариант: замените код

C#
1
2
                AudioList = Vk.vk.Audio.Search(textBox1.Text, out totalCount, null, null, null, 300, null);
                listBox1.DataSource = AudioList;
на такой

C#
1
2
3
4
5
6
7
                AudioList = Vk.vk.Audio.Search(textBox1.Text, out totalCount, null, null, null, 300, null);
if (AudioList.Count() == 0) {
MessageBox.Show("Список пуст");
} else {
MessageBox.Show("Title первой записи: " + AudioList[0].Title);
}
                listBox1.DataSource = AudioList;
0
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21
14.02.2016, 18:28  [ТС]
да отображается название первой записи.
0
Эксперт .NET
 Аватар для Usaga
14291 / 9376 / 1352
Регистрация: 21.01.2016
Сообщений: 35,332
14.02.2016, 18:45
Цитата Сообщение от gozaltech Посмотреть сообщение
да, когда задается поиск, вместо того чтобы отобразить исполнителя и названия отображаются цифры.
Можно узнать, что за цифры у вас отображаются? Просто код-то выглядит рабочим...
0
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 21
14.02.2016, 18:48  [ТС]
вот что-то типа того.
audio13197742_89402338
такое чувство, что он просто не задействован.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.02.2016, 18:48
Помогаю со студенческими работами здесь

Как обойтись без x
Есть алгоритм (см. прикрепления) Нужно обойтись без x Речь идет о замене элементов находящихся на четных и нечетных местах. (поменять...

Как обойтись без x
Есть алгоритм (см. прикрепления) Нужно обойтись без x Речь идет о замене элементов находящихся на четных и нечетных местах. (поменять...

Как обойтись без сокетов?
Здравствуйте! Стоит следующая задача: есть сервер с виртуальным хостингом, есть от 2 до 5 компьютеров, в дальнейшем больше планируется. ...

Как обойтись без списка?
Есть список Tick в который несколько раз в секунду добавляются новые объекты (Time, Volume). Возможны ситуации, когда объекты не...

Как обойтись без капчи
Уважаемые господа! Подскажите, кто знает, какие элементы кода можно использовать, чтобы обойтись без капчи? Я о том, умеют ли боты...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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