С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/48: Рейтинг темы: голосов - 48, средняя оценка - 4.50
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138

Как сделать проверку клика по picturebox?

12.04.2015, 17:41. Показов 9789. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как задать такое условие: если будет произведён клик по picturebox то...
Я это делаю вот как:

C#
1
2
3
4
5
Form2 f2 = new Form2();
if (pictureBox1.Click == true)
{ 
f2.Show() 
}
Проблема в том, что Visual Studio не определяет ".Click". Как это можно исправить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2015, 17:41
Ответы с готовыми решениями:

Сделать ожидание события клика на программно созданных pictureBox
Как сделать ожидание события клика на программно созданных pictureBox? Пробовал через Sleep, но он подгружает программу, не кликнуть, не...

Как сделать проверку наложения двух PictureBox?
Пытался сделать вот такой код: Privale Sub nanan(sender As Object, e As KeyEventArgs) Handles Me.KeyUp If 8.Left = 9.Left Then GoTo 1...

как сделать триггер клика (имитация клика)
Добрый день! У меня есть 2 менюшки на сайте с аналогичными ссылками. Пытаюсь сделать связь, чтобы при клике на ссылку например,...

47
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
12.04.2015, 18:00
Надо написать это в событии pictureBox1_Click
C#
1
2
3
4
5
private void pictureBox1_Click(object sender, EventArgs e)
        {
            Form f = new Form();
            f.Show();
        }
0
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138
12.04.2015, 18:10  [ТС]
Цитата Сообщение от Alexeydad Посмотреть сообщение
Надо написать это в событии pictureBox1_Click
C#
1
2
3
4
5
private void pictureBox1_Click(object sender, EventArgs e)
        {
            Form f = new Form();
            f.Show();
        }
Хах, если бы всё было так просто, но мне это не подходит, мне нужно именно так, как я написал, но в рабочем варианте)
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
12.04.2015, 18:14
Так а где ты пытаешься отловить это событие?
0
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138
12.04.2015, 18:33  [ТС]
Цитата Сообщение от Alexeydad Посмотреть сообщение
Так а где ты пытаешься отловить это событие?
В общем имеется 1-я форма, на ней расположены pictureBox(ы) и имеется вторая форма, она выглядит как приложение для просмотра фото, так вот, мне нужно сделать, если будет нажат на 1-й форме 1-й pictureBox, то загружается картинка с 1-го pictureBox во вторую форму, если нажат 2-й pictureBox, то загружается картинка со 2-го pictureBox во вторую форму и т.д.
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
12.04.2015, 20:39
Цитата Сообщение от daniel_kobica Посмотреть сообщение
В общем имеется 1-я форма, на ней расположены pictureBox(ы) и имеется вторая форма, она выглядит как приложение для просмотра фото, так вот, мне нужно сделать, если будет нажат на 1-й форме 1-й pictureBox, то загружается картинка с 1-го pictureBox во вторую форму, если нажат 2-й pictureBox, то загружается картинка со 2-го pictureBox во вторую форму и т.д.
То есть у тебя всего две формы? и вторая как просмотр картинок из pictureBox первой формы,правильно?
Чем конкретно не походит стандартный способ, который я приводил выше?
0
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138
12.04.2015, 22:42  [ТС]
Цитата Сообщение от Alexeydad Посмотреть сообщение
То есть у тебя всего две формы? и вторая как просмотр картинок из pictureBox первой формы,правильно?
Чем конкретно не походит стандартный способ, который я приводил выше?
Да, Вы всё так поняли. Не устраивает тем, что по мимо этого, на второй форме есть кнопка далее, я уже ранее пробовал тот способ, который Вы предложили. Вот код со второй формы:
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
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;
using System.IO;
 
namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {
        public static string Path = "D:\\Проект\\WindowsFormsApplication1\\Images\\Stadium\\";
        private string[] Files;
 
        private int index = 0;
 
        public Form3()
        {
 
 
 
            InitializeComponent();
            Form1 f1 = new Form1();
            
            this.Files = Directory.GetFiles(Path, "*.jpg");
 
            if (Files != null && Files.Length > index)
            {
                this.pictureBox1.Image = Image.FromFile(Files[index]);
            }
            
        }
 
        private void Form3_Shown(object sender, EventArgs e)
        {
 
Form1 f1 = new Form1();
 
            {
 
                this.pictureBox1.Image = Image.FromFile(Files[index]);
            }
 
 
 
 
            this.Move += delegate { this.Capture = false; };
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
            this.TopMost = true; //1-я форма не активна
 
            this.Location = new Point((Screen.PrimaryScreen.Bounds.Width - this.Width) / 2, // Форма по центру
                (Screen.PrimaryScreen.Bounds.Height - this.Height) / 2);
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (Files != null && Files.Length > index)
            {
                this.pictureBox1.Image = Image.FromFile(Files[index]);
                this.index += 1;
            }
 
 
 
        }
 
        private void Form3_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                Close();
            }
        }
    }
}
Мне нужно чтобы можно было кликнуть по любому pictureBox с 1-й формы и что бы грузилась именно та картинка, по которой был сделан клик, и ещё, что бы это дело можно было пролистывать на 2-й форме. Именно в этом у меня и возникла проблема. В данном коде у меня всё время во второй форме открывается одна и та же картинка - первая картинка, находящаяся в папке.
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
13.04.2015, 01:18
daniel_kobica, картинка у тебя все время загружается одна и та же, потому что у тебя при загрузке формы переменная
C#
1
private int index = 0;
Всегда равно "0". как у тебя загружаются картинки на первую форму,скинь код. Если через этот же массив и он также отсортирован, то надо всего лишь передать Index картинки в массиве с одной формы на другую.
0
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138
13.04.2015, 01:36  [ТС]
Цитата Сообщение от Alexeydad Посмотреть сообщение
daniel_kobica, картинка у тебя все время загружается одна и та же, потому что у тебя при загрузке формы переменная
C#
1
private int index = 0;
Всегда равно "0". как у тебя загружаются картинки на первую форму,скинь код. Если через этот же массив и он также отсортирован, то надо всего лишь передать Index картинки в массиве с одной формы на другую.
Про этот индекс я знаю. В данном месте я хотел задать условие:
C#
1
2
3
4
if (Files != null && Files.Length > index)
            {
                this.pictureBox1.Image = Image.FromFile(Files[index]);
            }
Хотел сделать так: если на 1-й форме будет нажат pictureBox2 то присвоим индексу +1, вот типа так:
C#
1
2
3
4
5
6
7
if (Files != null && Files.Length > index)
            {
                this.pictureBox1.Image = Image.FromFile(Files[index]);
                this.index += 1;
if (pictureBox2.Click == true)
this.pictureBox1.Image = Image.FromFile(Files[index+1]);
            }
Но, увы, VS ругается на .Click

На первой форме у меня на всех pictureBox стоит вот этот код
C#
1
2
Form3 f3 = new Form3();  
            f3.Show();
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
13.04.2015, 14:41
Лучший ответ Сообщение было отмечено daniel_kobica как решение

Решение

Решил я твою проблему, у меня код рабочий смотри Коментарии
Код первой формы

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
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.Text.RegularExpressions;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public static int indexpic = 0;
        public Form1()
        {
            
            InitializeComponent();
            foreach (Control pic in this.Controls)// Отлавливаем клик мыши
            {
                pic.Click += new EventHandler(c_Click);
            }
    
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void c_Click(object sender, EventArgs e)// Событие которое нам создает форму просмотра и передает индекс pictureBox
        {
            Control c = sender as Control;
            string PicName = c.Name;// Получаем имя элемента по которому кликнули
            indexpic = Convert.ToInt32(Regex.Replace(PicName, @"[^\d]+", "")) - 1; // достаем номер pictureBox и так как массив начинается с 0, то от полученного номера -1
            Form2 f = new Form2(indexpic);// вызываем форму просмотра и передаем ей индекс картинки
            f.Show();
        }
 
       
    
    }
}
Код второй формы

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.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public static string Path = "D:\\Проект\\WindowsFormsApplication1\\Images\\Stadium\\";
        private string[] Files;
 
        private int index = 0;
 
        public Form2(int indexpic)
        {
  
            InitializeComponent();
            Form1 f1 = new Form1();
            this.index = indexpic;// получаем индекс картинки
 
            this.Files = Directory.GetFiles(Path, "*.jpg");
 
            if (Files != null && Files.Length > index)
            {
                this.pictureBox1.Image = Image.FromFile(Files[index]);
            }
            
        }
       
 
        private void Form2_Load(object sender, EventArgs e)
        {
 
            Form1 f1 = new Form1();
 
            {
 
                this.pictureBox1.Image = Image.FromFile(Files[index]);
            }
 
 
 
 
            this.Move += delegate { this.Capture = false; };
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
            this.TopMost = true; //1-я форма не активна
 
            this.Location = new Point((Screen.PrimaryScreen.Bounds.Width - this.Width) / 2, // Форма по центру
                (Screen.PrimaryScreen.Bounds.Height - this.Height) / 2);
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            if (Files != null && Files.Length - 1 > index)// здесь подправил условие Files.Length-1 > index, так как длинна массива это количество элементов, а их индекс в массиве на 1 меньше
            {
                this.index += 1;
                this.pictureBox1.Image = Image.FromFile(Files[index]);
                
            }
 
 
 
        }
 
        private void Form2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Escape)
            {
                Close();
            }
        }
 
       
    }
}
1
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138
13.04.2015, 19:41  [ТС]
Спасибо Вам большое, выручили, с меня +
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
13.04.2015, 19:42
На здоровье главное чтобы это тебе помогло)
0
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138
13.04.2015, 19:57  [ТС]
Цитата Сообщение от Alexeydad Посмотреть сообщение
if (Files != null && Files.Length - 1 > index)// здесь подправил условие Files.Length-1 > index, так как длинна массива это количество элементов, а их индекс в массиве на 1 меньше
* * * * * * {
* * * * * * * * this.index += 1;
* * * * * * * * this.pictureBox1.Image = Image.FromFile(Files[index]);
}
Всё таки возник ещё один не большой вопрос, создал button2 и на него скопировал выше цитируемый код, в нём изменил только один знак с + на -. Вот так вот:
C#
1
this.index -= 1;
Всё работает, при клике возвращает картинку на одну назад, но когда картинка оказывается первой, и при повторном клике назад программа вылетает, ссылаясь на эту строчку:
C#
1
this.pictureBox1.Image = Image.FromFile(Files[index]);
Но когда я нажимаю вперёд и картинка оказывается последней, я кликаю сколько захочу и ошибка не вылетает, почему это так?
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
13.04.2015, 20:05
Лучший ответ Сообщение было отмечено daniel_kobica как решение

Решение

Если я тебя правильно понял, то в кнопке назад вот такой код

C#
1
2
3
4
5
if (Files != null && Files.Length - 1 > index)// здесь подправил условие Files.Length-1 > index, так как длинна массива это количество элементов, а их индекс в массиве на 1 меньше
{
 this.index -= 1;
 this.pictureBox1.Image = Image.FromFile(Files[index]);
}
То в таком случае надо добавить еще и проверку на index, чтобы он не был меньше нуля

C#
1
2
3
4
5
6
7
8
if (Files != null && Files.Length - 1 > index)// здесь подправил условие Files.Length-1 > index, так как длинна массива это количество элементов, а их индекс в массиве на 1 меньше
{
                if (index => 1)//Проверка index равен 1 или больше 1
                {
                    this.index -= 1;
                    this.pictureBox1.Image = Image.FromFile(Files[index]);
                }
}
1
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138
13.04.2015, 20:16  [ТС]
Да, в кнопке назад именно такой код

В Вашем коде VS ругается на данную строчку, а именно на то, что находиться в скобках:
C#
1
if (index => 1)//Проверка index равен 1 или больше 1
Текст ошибки такой: Ошибка 1 Невозможно объявить локальную переменную с именем "index" в этой области действия, так как она придаст другое значение "index", которая уже используется в области действия "родительский или текущий" для обозначения чего-то другого
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
13.04.2015, 20:17
Ой писал на скорую, знаки местами поменяй >=,должно помочь
0
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138
14.04.2015, 15:14  [ТС]
Там всего лишь знаки не так стояли => нужно было местами поменять, всё работает, ещё раз спасибо =)

Добавлено через 18 часов 51 минуту
И снова вопрос) Решил добавить на форму фон, добавил pictureBox, и при клике на него открывается 2-я форма, это не очень удобно, помимо этого на 1-й форме располагается множество других pictureBox, которые выполняют свои функции, при клике на них же открывается вторая форма, можно ли сделать открытие второй формы только при клике на определённые pictureBox, а не на все, которые имеются на 1-й форме?
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
14.04.2015, 15:22
А зачем добавил фон через pictureBox? Почему не через this.BackgroundImage ?

Добавлено через 3 минуты
Те pictureBox по которым надо делать открытие второй формы, заранее известно сколько их? их номера?
0
4 / 4 / 2
Регистрация: 26.10.2014
Сообщений: 138
14.04.2015, 15:52  [ТС]
Цитата Сообщение от Alexeydad Посмотреть сообщение
А зачем добавил фон через pictureBox? Почему не через this.BackgroundImage ?

Добавлено через 3 минуты
Те pictureBox по которым надо делать открытие второй формы, заранее известно сколько их? их номера?
Сейчас сообщением кину ссылку на свой проект
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
14.04.2015, 16:06
У меня не открывается у меня 10 студия(((

Добавлено через 3 минуты
Все вроде преобразовал

Добавлено через 6 минут
Я посмотрел, но без твоих подсказок мне не разобраться))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2015, 16:06
Помогаю со студенческими работами здесь

Клик по PictureBox: получение координат клика на PictureBox.Image
Собственно имею PictureBox, например размерами 500 на 500 и в нем есть картинка, например размерами 1000 на 1000, я ее масштабирую, что бы...

Как определить координаты клика в PictureBox?
Добрый день. Есть на форме Picturebox. После клика по этому пиктурбоксу каким образом определить координату Х и У ?

Как зафиксировать ресурс (изображение) в pictureBox после клика?
При клике на PictureBox1 должен поменяться ресурс (изображение) При клике на PictureBox2 или PictureBox3 изображение PictureBox1 должно...

Как поставить условие на проверку координат pictureBox
Как поставить условие на проверку координат пикчебокса? Что-то то типо этого: if(pictureBox1.Location = (x,y))//Если координаты...

Получить координаты клика по pictureBox
событие сгенерированое несет объект EventArgs e однако из него невозможно узнать координаты мыши. их узнать можно из объекта ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru