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

Создание случайного picturebox из класса

14.11.2013, 18:28. Показов 2855. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, недавно начал осваивать классы и вот появился вопрос, с которым самому не получается справиться (даже после изучения материалов гугла ^_^).Что мне нужно: по нажатию кнопки на панель создаются несколько случайных заранее созданных пикчебоксов (pB1,pB2,pB3) из класса Class1. Что я использую:

Горе-класс:
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
namespace WindowsFormsApplication1
{
    public class Class1 : System.Windows.Forms.PictureBox
    {
        private PictureBox pB1;
        private PictureBox pB2;
        private PictureBox pB3;
        Bitmap IMP0 = new Bitmap("IMP0.jpg");
        Bitmap IMP1 = new Bitmap("IMP1.jpg");
        Bitmap IMP2 = new Bitmap("IMP2.jpg");
 
        private void InitializeComponent()
        {
            this.pB1 = new System.Windows.Forms.PictureBox();
            this.pB2 = new System.Windows.Forms.PictureBox();
            this.pB3 = new System.Windows.Forms.PictureBox();
            ((System.ComponentModel.ISupportInitialize)(this.pB1)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.pB2)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.pB3)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this)).BeginInit();
            this.SuspendLayout();
            // 
            // pB1
            // 
            this.pB1.Location = new System.Drawing.Point(0, 0);
            this.pB1.Name = "pB1";
            this.pB1.Size = new System.Drawing.Size(10, 10);
            this.pB1.TabIndex = 0;
            this.pB1.TabStop = false;
            this.pB1.Image = (Image)IMP0;
            this.pB1.Click += new System.EventHandler(this.pictureBox1_Click);
            // 
            // pB2
            // 
            this.pB2.Location = new System.Drawing.Point(0, 0);
            this.pB2.Name = "pB2";
            this.pB2.Size = new System.Drawing.Size(10, 10);
            this.pB2.TabIndex = 0;
            this.pB2.TabStop = false;
            this.pB2.Image = (Image)IMP1;
            this.pB2.Click += new System.EventHandler(this.pictureBox2_Click);
            // 
            // pB3
            // 
            this.pB3.Location = new System.Drawing.Point(0, 0);
            this.pB3.Name = "pB3";
            this.pB3.Size = new System.Drawing.Size(10, 10);
            this.pB3.TabIndex = 0;
            this.pB3.TabStop = false;
            this.pB3.Image = (Image)IMP2;
            this.pB3.Click += new System.EventHandler(this.pictureBox3_Click);
            ((System.ComponentModel.ISupportInitialize)(this.pB1)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.pB2)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.pB3)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this)).EndInit();
            this.ResumeLayout(false);
 
        }
 
        private void pictureBox1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void pictureBox2_Click(object sender, EventArgs e)
        {
 
        }
 
        private void pictureBox3_Click(object sender, EventArgs e)
        {
 
        }
    }
}
Кнопка:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        private Class1[] pB = new Class1[5];
        Random RND = new Random();
        int Val = 0;
 
        private void button1_Click(object sender, EventArgs e)
        {
            string s = "pB" + RND.Next(0, 3);
            for (int i = 0; i < 5; i++)
            {
 
            }
        }
Что такого нужно дописать в цикл,чтобы вызвать случайный пикчебокс из класса? Я собираюсь их вызвать несколько, формулу для Location уже придумал, но вот как вызвать не знаю( Правда первый раз работаю с классами, возможно ещё там что-то не то написал.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.11.2013, 18:28
Ответы с готовыми решениями:

Создание класса для управления PictureBox
Здраствуйте форумчане! Столкнулся с проблемой создания отдельного класа, которий может перемещать или еще как то упрявлять pictureBox-ом...

Создание случайного выбора
Мне нужно создать случайный выбор из набора цифр: 1000,750,2000,1500,500,1250. Но нужно,чтобы перед этим хотя бы 3 числа в label сменились...

Создание PictureBox из класса.
Здравствуйте. Создал класс, который должен создавать PictureBox на форме, но картинка не появляется. В чём ошибка? Класс: ...

14
 Аватар для Slicker
49 / 49 / 12
Регистрация: 18.01.2013
Сообщений: 169
14.11.2013, 18:41
Что-то не понятно что вы хотите сделать? Вы унаследовали класс от PictureBox'a и в нем же создаете 3 PictureBox'a? Зачем?
0
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 9
14.11.2013, 18:53  [ТС]
Цитата Сообщение от Slicker Посмотреть сообщение
Что-то не понятно что вы хотите сделать? Вы унаследовали класс от PictureBox'a и в нем же создаете 3 PictureBox'a? Зачем?
А, значит наследовать класс не нужно... Тогда
C#
1
public class Class1 : System.Windows.Forms.PictureBox
можно заменить на
C#
1
public class Class1
Если я правильно понимаю. Я хочу, чтобы цикл создал 5 пикчебоксов наугад из pB1,pB2 или pB3 из класса Class1
0
 Аватар для Slicker
49 / 49 / 12
Регистрация: 18.01.2013
Сообщений: 169
14.11.2013, 18:55
Почему просто не создать массив PictureBox'ов? Зачем вам новый класс?

C#
1
2
3
4
5
6
PictureBox[] pB = new PictureBox[3];
for(int i =0; i < 3; i++)
{
pB[i] = new PictureBox();
pB[i].Image = new Bitmap("IMP" + i.ToString() + ".jpg");
}
0
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 9
14.11.2013, 18:59  [ТС]
Цитата Сообщение от Slicker Посмотреть сообщение
Почему просто не создать массив PictureBox'ов? Зачем вам новый класс?

C#
1
2
3
4
5
6
PictureBox[] pB = new PictureBox[3];
for(int i =0; i < 3; i++)
{
pB[i] = new PictureBox();
pB[i].Image = new Bitmap("IMP" + i.ToString() + ".jpg");
}
В дальнейшем планируется разным pB(pB1,pB2,pB3) дать различные свойства, мне нужен вызов именно созданных в классе pB'ов.
0
 Аватар для Slicker
49 / 49 / 12
Регистрация: 18.01.2013
Сообщений: 169
14.11.2013, 19:15
Цитата Сообщение от IFach Посмотреть сообщение
В дальнейшем планируется разным pB(pB1,pB2,pB3) дать различные свойства, мне нужен вызов именно созданных в классе pB'ов.
Попробуйте так. Вместо цветов используйте свои картинки.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   int count = 0;
        Random rnd = new Random();
        private void button1_Click(object sender, EventArgs e)
        {
                Color[] c = new Color[3];
                c[0] = Color.Red;
                c[1] = Color.Blue;
                c[2] = Color.Yellow;
                
                for (int i = 0; i < 5; i++)
                {
                    PictureBox p = new PictureBox();
                    int k = rnd.Next(0, 3);
                    p.Location = new Point(count, 0);
                    p.Size = new Size(100, 100);
                    p.BackColor = c[k];
                    this.Controls.Add(p);
                    count += 100;
                }            
        }
0
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 9
14.11.2013, 19:23  [ТС]
Цитата Сообщение от Slicker Посмотреть сообщение
Попробуйте так. Вместо цветов используйте свои картинки.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   int count = 0;
        Random rnd = new Random();
        private void button1_Click(object sender, EventArgs e)
        {
                Color[] c = new Color[3];
                c[0] = Color.Red;
                c[1] = Color.Blue;
                c[2] = Color.Yellow;
                
                for (int i = 0; i < 5; i++)
                {
                    PictureBox p = new PictureBox();
                    int k = rnd.Next(0, 3);
                    p.Location = new Point(count, 0);
                    p.Size = new Size(100, 100);
                    p.BackColor = c[k];
                    this.Controls.Add(p);
                    count += 100;
                }            
        }
Не подходит( Я не стал писать, дабы не растягивать первый пост, pB1 и pB2 будут иметь события DragDrop(для перетаскивания), у pB1 будет собственный лэйбл со значением 1, у pB2 собственный лэйбл со значением 2. pB3 тоже своими особенностями обладать будет. Чтобы не нагромождать код основной формы создал класс, где создаются pB1,pB2,pB3 (потом добавлю ещё pB с большими номерами) и получают свои свойства. Их можно как-то переименовать, или ещё что-нибудь сделать, главное, чтобы кнопка вызывала случайный pB1,pB2 или pB3 из класса.
0
 Аватар для Slicker
49 / 49 / 12
Регистрация: 18.01.2013
Сообщений: 169
14.11.2013, 19:40
Цитата Сообщение от IFach Посмотреть сообщение
Не подходит( Я не стал писать, дабы не растягивать первый пост, pB1 и pB2 будут иметь события DragDrop(для перетаскивания), у pB1 будет собственный лэйбл со значением 1, у pB2 собственный лэйбл со значением 2. pB3 тоже своими особенностями обладать будет. Чтобы не нагромождать код основной формы создал класс, где создаются pB1,pB2,pB3 (потом добавлю ещё pB с большими номерами) и получают свои свойства. Их можно как-то переименовать, или ещё что-нибудь сделать, главное, чтобы кнопка вызывала случайный pB1,pB2 или pB3 из класса.
Ну дак сделайте их в своем классе public и берите Class1.pB1
0
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 9
14.11.2013, 19:43  [ТС]
Цитата Сообщение от Slicker Посмотреть сообщение
Ну дак сделайте их в своем классе public и берите Class1.pB1
Public сделал. А как брать не pB1,а случайный pB из Class1?
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
14.11.2013, 19:54
1) для начала вы не знаете как пользоваться массивами
2) совсем непонятно что за загадочный Class1 такой
3) pB1, pB2, pB3 - это переменные в твоей программе и динамического доступа к ним нет(то есть мы не можем динамически указать имя переменной с которой хотим работать
4) Class1[] - это массив для объектов типа Class1, но ни один из элементов не иницилизирован! и никакого отношения к созданным PictureBox не имеет
0
 Аватар для Slicker
49 / 49 / 12
Регистрация: 18.01.2013
Сообщений: 169
14.11.2013, 20:00
Цитата Сообщение от IFach Посмотреть сообщение
Public сделал. А как брать не pB1,а случайный pB из Class1?
Если хотите обращаться по индексу, то нужен массив. Но я категорически не понимаю зачем вам создавать в классе 3 pictureBox и потом брать всего один из них, когда можно создать один и подставить нужную картинку. Создавая экземпляр внутри цикла вы и так сможете задать каждому свои свойства и никакой класс не понадобится
0
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 9
14.11.2013, 20:06  [ТС]
Цитата Сообщение от Learx Посмотреть сообщение
1) для начала вы не знаете как пользоваться массивами
2) совсем непонятно что за загадочный Class1 такой
3) pB1, pB2, pB3 - это переменные в твоей программе и динамического доступа к ним нет(то есть мы не можем динамически указать имя переменной с которой хотим работать
4) Class1[] - это массив для объектов типа Class1, но ни один из элементов не иницилизирован! и никакого отношения к созданным PictureBox не имеет
Потому и написал в раздел форума для новичков, что ещё многого не знаю(

Цитата Сообщение от Slicker Посмотреть сообщение
Если хотите обращаться по индексу, то нужен массив. Но я категорически не понимаю зачем вам создавать в классе 3 pictureBox и потом брать всего один из них, когда можно создать один и подставить нужную картинку. Создавая экземпляр внутри цикла вы и так сможете задать каждому свои свойства и никакой класс не понадобится
Как раз случайно наткнулся на запросы по "массив данных из picturebox", нашёл вот такую штуку:

C#
1
if (((PictureBox)sender).Tag = ...)
Вот только она не работает. Если заставить её работать как я хочу, то можно избежать моих вышеуказанных нужд)

Создаются несколько picturebox в цикле, каждый picturebox получает свой Tag.В событии panel_DragDrop требуется,чтобы в панели, в зависимости от Tag picturebox'a перенесённого в панель, менялись некоторые значения. Может кто-то знает, как при помощи вышеуказанного кода(или без него), можно получать Tag от полученного panel'ью picturebox'a?
0
 Аватар для Slicker
49 / 49 / 12
Регистрация: 18.01.2013
Сообщений: 169
14.11.2013, 20:16
Цитата Сообщение от IFach Посмотреть сообщение
Потому и написал в раздел форума для новичков, что ещё многого не знаю(



Как раз случайно наткнулся на запросы по "массив данных из picturebox", нашёл вот такую штуку:

C#
1
if (((PictureBox)sender).Tag = ...)
Вот только она не работает. Если заставить её работать как я хочу, то можно избежать моих вышеуказанных нужд)

Создаются несколько picturebox в цикле, каждый picturebox получает свой Tag.В событии panel_DragDrop требуется,чтобы в панели, в зависимости от Tag picturebox'a перенесённого в панель, менялись некоторые значения. Может кто-то знает, как при помощи вышеуказанного кода(или без него), можно получать Tag от полученного panel'ью picturebox'a?
Тэг можно присваивать контролу, перед тем как добавить его на форму
Например так
C#
1
2
3
Control c = pictureBox1;
c.Tag = "значение";
this.Controls.Add(c);
Потом можно перебирать контролы
C#
1
2
3
foreach(Control cntr in this.Controls)
   if(cntr.Tag.ToString() == "что-то там")
      действие
Так же контролам можно задавать Location
1
0 / 0 / 0
Регистрация: 14.11.2013
Сообщений: 9
14.11.2013, 20:46  [ТС]
Цитата Сообщение от Slicker Посмотреть сообщение
Тэг можно присваивать контролу, перед тем как добавить его на форму
Например так
C#
1
2
3
Control c = pictureBox1;
c.Tag = "значение";
this.Controls.Add(c);
Потом можно перебирать контролы
C#
1
2
3
foreach(Control cntr in this.Controls)
   if(cntr.Tag.ToString() == "что-то там")
      действие
Так же контролам можно задавать Location
Добавил Control c... в цикл for, foreach... во вторую панель, на которую картинка переносится с первой. Теперь picturebox'ы после создания не переносятся в на вторую панель, хотя на другие панели переносятся спокойно.

Добавлено через 15 минут
Tag'и уже кое-где используются. Slicker,спасибо за Ваши идеи, буду много чего править и,чувствую, заработает. Если нет, напишу сюда ещё раз
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
15.11.2013, 11:31
вы изучите для начала основы.
изучите для начала что такое массивы, классы, методы и т.д. по этой ссылке
затем постепенно изучайте WinForms, активно пользуйтесь msdn там толковые примеры использования любого контрола.
ну и еще

на форум файл не удалось залить - выдает "Внутренняя ошибка сервера. "
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2013, 11:31
Помогаю со студенческими работами здесь

Программное создание PictureBox с проверкой, нет ли на его месте другого PictureBox
Здравствуйте! Нужно чтобы при нажатии кнопки создавался PictureBox с определёнными свойствами Location: x, y и SizeMode: Autosize и в него...

Создание случайного логина
Как создать функции которая сама бы генерировала логин (что вроде этого asf214fas)?

Создание окружностей случайного размера
Здравствуйте! как реализовать на делфи следующее? имеется прямоугольник ( его размер не меняется), и по нажатии на клавишу внутри него...

Создание случайного массива с заданными числами
Здравствуйте,есть строка sy1 = она как видно состоит из 4 элементов, мне необходимо создать массив из тех же элементов, но...

Создание генератора случайного игрового мира
Здравствуйте! Есть идея создать генератор мира (он уже есть, но только для регулярной квадратной сетки - см. далее) поверхности...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru