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

Usercontrol и mousedown

16.12.2015, 11:09. Показов 2694. Ответов 13
Метки нет (Все метки)

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

Создаю собственный элемент - Contrl1. Налепил на него PicterBox1, Lable1, Lable2. Сам размер элемента небольшой.
Создал и собрал его, установил в мой проект. Далее делаю перетаскивание элемента. Инициирую перетаскивание в обработчике события MouseDown (Contrl1_MouseDown). Все работает, за исключением того что событие срабатывает если наживать на той области элемента где нету Lable`ов и PicterBox`а.

Можно ли как то указать чтоб событие срабатывало не только по нажатию области где нету Lable`ов и PicterBox`а, а по нажатию на всем элементе?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.12.2015, 11:09
Ответы с готовыми решениями:

Как разместить UserControl поверх другого UserControl
Такая задача. Есть форма. На ней размещена панель panelRight. Также есть два пользовательских контрола (TimelineControl() и Bar()). Потом в...

Usercontrol и mousedown
Добрый день. Создаю собственный элемент - Contrl1. Налепил на него PicterBox1, Lable1, Lable2. Сам размер элемента небольшой. Создал...

Кастомная кнопка в UserControl или UserControl со свойствами кнопки
Привет, пытаюсь запихнуть кастомную кнопку в Useк Control. Что-то ерунда какая-то получается. Можете помочь? Хотелось бы UC со...

13
673 / 45 / 16
Регистрация: 23.10.2015
Сообщений: 93
16.12.2015, 11:43
Лучший ответ Сообщение было отмечено Nikoli4 как решение

Решение

Как вариант, прописать тот же код и в обработчик событий при выборе этих элементов)
1
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 190
16.12.2015, 13:05  [ТС]
IngProj, спасибо. что то я даже не подумал что так можно сделать=)
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
16.12.2015, 18:45
Такой подход неудобен тем, что при изменении обработчика в одном месте, необходимо его менять будет еще в нескольких. Я бы в обработчиках событий элементов контрола просто вызывал бы обработчик, привязанный к событию контрола:
C#
1
2
3
4
5
private void Label1_Click(object sender, EventArgs e)
{
   if (this.onClick != null)
      onClick(this, e);
}
0
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 190
17.12.2015, 10:47  [ТС]
Тоже вариант.
И еще вопросик.
Пытаюсь сделать параллельную обработку событий mousedown и mousemove.
Делаю с помощью потоков. Нажимая на кнопку button1_MouseDown, и передвигая мышь по форме должна вызываться обработки перемещения мыши. При условии что кнопка мыши еще не отпущена. При перемещении должен будет запуститься 3-ий поток где. Будет обработчик отпускания мыши по которому все запущенные потоки будут закрыты.
Пытаюсь с имитировать перемещение элемента по по форме, нажали по элементу, переместили мышь и соответственно переместили элемент, отпустили мышь и элемента закрепился на новом месте. Знаю что можно используя Drag&Drop, но мне нужно так же что б вместе с мышью перемещалась сама кнопка. Но щас это не главное, в основном на данный момент интересует меня параллельное выполнение обработчиков событий.




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
namespace TestTheard
{
    public partial class Form1 : Form
    {
        Thread t = new Thread( что сюда писать для того что бы был задействован обработчик перемещения мыши в новом потоке, я так и не понял. );
        Thread t1 = new Thread(что сюда писать для того что бы был задействован обработчик отпускания мыши в новом потоке, я так тоже и не понял);
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_MouseDown(object sender, MouseEventArgs e)
        {
           Здесь 
           t.Start();
        }
 
        public void Form1_MouseMove(object sender, MouseEventArgs e)
        {
           Здесь 
           t1.Start();
        }
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
 
        }
    }
}
0
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 190
28.12.2015, 11:13  [ТС]
добры день.
Возникла новая сложность.
Проблема аналогичная той, которая в первом посте, но с той разнице, что мне нужно вызывать Form2.
Не очень пойму как пользовательскому контролу передать возможность вызвать Form2.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
28.12.2015, 11:41
Цитата Сообщение от Nikoli4 Посмотреть сообщение
Возникла новая сложность.
Вообще нет никакой сложности.
Можно в любом обработчике любого контрола юзерконтрола прописать:
C#
1
2
Form2 f2 = new Form2();
f2.Show();
0
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 190
28.12.2015, 13:16  [ТС]
Имеется ввиду не сам обработчик юзерконтрола, а обработчик элемента юзерконтрола. Т.е юзерконтрола у меня состоит из PicterBox1, Lable1, Lable2. + сама область юзерконтрола. Но события для PicterBox1, Lable1, Lable2 нужно описывать как то иначе, что бы они воспринимались как один целый элемент.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
28.12.2015, 15:02
Цитата Сообщение от Nikoli4 Посмотреть сообщение
события для PicterBox1, Lable1, Lable2 нужно описывать как то иначе, что бы они воспринимались как один целый элемент
Можно событие щелчка по каждому из контролов и по области юзерконтрола привязать к одному обработчику.
0
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 190
28.12.2015, 15:31  [ТС]
Ну на данный момент есть:

В юзерконтроле:
C#
1
2
3
4
5
6
7
public event RoutedEventHandler ButtonMouseDown;
 
private void button_ButtonMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (ButtonMouseDown != null)
                ButtonMouseDown(sender, e);
        }
В проекте:
В Load пишу так,
C#
1
2
3
4
5
6
7
8
private void Sheme_Load(object sender, EventArgs e)
        {
            new ClassControl.BTRK().ButtonMouseDown += (sen, args) =>
            {
                configBRC newBRC = new configBRC();
                newBRC.Show();
            }; 
        }
т.е делаю подписку на событие как я понимаю.


Пишу обработчик:
C#
1
2
3
4
private void btrk1_ButtonMouseDown(object sender, RoutedEventArgs e)
        {
           
        }
А вот что дальше делать я не понимаю.

По идее нужно в юзерконтроле, для кнопки указать обработчик button_ButtonMouseDown. Но он не воспринимает button_ButtonMouseDown как процедуру обработки.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
28.12.2015, 15:48
А что мешает прямо в юзерконтроле:
C#
1
2
3
4
5
private void button_ButtonMouseDown(object sender, MouseButtonEventArgs e) // или в любом другом обработчике
{
   configBRC newBRC = new configBRC();
   newBRC.Show();
}
0
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 190
28.12.2015, 16:09  [ТС]
То место где мои юзерконтролы, это отдельный проект.
У меня Solution из двух проектов:
- ClassControl - то место где находятся мои юзерконтролы; //Не основной проект
- DrawingSheme - главный проект, где всякие формы, включая то которое мне нужно вызвать.
//ClassControl подключен в References главного проекта, здесь передача данных из ClassControl в DrawingSheme без проблем.

А мне нужно что бы по нажатию на кнопку, которая является частью юзерконтрола, находящегося в не главном проекте, открывалась форма находящееся в главном проекте.
Сделать отдельно обработчик на кнопку, которая является частью юзерконтрола, в ClassControl, без проблем.
А вот что бы она могла открывать форму вообще из другого проекта, я не могу.
P.S Может это вообще нельзя сделать, но я не знаю.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
28.12.2015, 16:33
В usercontrol'е из того же проекта:
C#
1
2
3
4
5
6
7
public event RoutedEventHandler ButtonMouseDown;
public delegate void RoutedEventHandler(object sender, MouseEventArgs e);
private void button1_MouseDown(object sender, MouseEventArgs e) //не забыть подключить обработчик
{
    if (ButtonMouseDown != null)
        ButtonMouseDown(sender, e);
}
В классе формы:
C#
1
2
3
4
5
6
7
8
9
10
private void Form1_Load(object sender, EventArgs e) //не забыть подключить обработчик
{
    UserControl1 control = new UserControl1();
    this.Controls.Add(control);
    control.ButtonMouseDown += (sen, args) =>
    {
        Form2 newBRC = new Form2();
        newBRC.Show();
    };
}
И все работает.
0
1 / 1 / 0
Регистрация: 04.12.2011
Сообщений: 190
28.12.2015, 17:12  [ТС]
Спасибо большое. Буду больше практиковаться с делегатами.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.12.2015, 17:12
Помогаю со студенческими работами здесь

DP UserControl внутри UserControl MVVM
Есть UC c DP Text <Grid> <TextBlock HorizontalAlignment="Left" Text="{Binding Text, ElementName=UC}"...

Перенос данных из UserControl в UserControl
Всем привет ! :) Суть проблемы следующая: • Есть 2 UserControl “V” и “MN” • В “V” есть textBox “Vso2” с названием...

Управление usercontrol из другого usercontrol
На форме размещено 2 usercontrol. Как управлять usercontrol из другого Добавлено через 22 часа 33 минуты Что не кто не поможет?

Обработчик события Mousedown
Народ я полный ноль в js вот есть код (не мой) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> ...

Вызов click из mousedown
Необходимо реализовать на сайте вызов click из mousedown. Есть готовый проект в котором переход по ссылкам реализован через click,...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru