Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
5 / 4 / 2
Регистрация: 24.09.2016
Сообщений: 423

Событие для динамического контролла

27.08.2019, 12:08. Показов 3402. Ответов 32
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Есть такая проблема у новичка. Динамически создан chart1, ось X которого - это время. Нужно при клике мышкой получить координаты оси X. Я написал обработчик событий
C#
1
2
3
chart1.MouseClick += new MouseEventHandler(chart)
void chart(object sender, MouseEventArgs e)
{};
Подскажите, пжлста, как переделать обработчик на chart1.MouseClick += new MouseEventArgs ... потому что (я думаю) иначе метод HitTest будет не правильно выдавать координаты.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.08.2019, 12:08
Ответы с готовыми решениями:

Вызвать событие другого контролла
Нужно в коде при else запускать действие, которое у меня уже есть на label при клике. Просто не хочу повторять код. Заранее спасибо.

Как привязать событие к свойству контролла
есть контрол у него есть свойство необходимо создать событие и привязать данное событие к свойству как создавать события нашел а вот как...

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

32
5 / 4 / 2
Регистрация: 24.09.2016
Сообщений: 423
27.08.2019, 16:48  [ТС]
Студворк — интернет-сервис помощи студентам
SeIZVeIZ, переделал Ваш код
C#
1
2
3
4
5
6
7
8
var hitTestResult = chrt.HitTest(e.X, e.Y);
            if (hitTestResult.Object != null) 
            {
               if (hitTestResult.Object is DataPoint point)
               {
                  DateTime xValue = DateTime.FromOADate(point.XValue);
               }
            }
Первое условие выполняется. Не выполняется второе. Выходит в "моей студии прописан" метод HitTest. Студия не ругается.
0
91 / 65 / 18
Регистрация: 09.12.2015
Сообщений: 212
27.08.2019, 16:49
Хотя у меня вроде бы ничего не меняется. Но кликать нужно именно по графику.
0
5 / 4 / 2
Регистрация: 24.09.2016
Сообщений: 423
27.08.2019, 16:54  [ТС]
BlackEric,
C#
1
series.ChartType = SeriesChartType.Candlestick;
За код спасибо. Буду разбираться.
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.08.2019, 16:54
DLD, Запустите под отладкой и посмотрите какого типа у Вас объект hitTestResult.Object возможно там вообще не то что вы ожидаете
0
91 / 65 / 18
Регистрация: 09.12.2015
Сообщений: 212
27.08.2019, 16:56
Я бы рекомендовал отладить мой пример в отдельном проекте, а потом уже переносить в основной. Что-то у вас где-то с заполнением косячит судя по всему.
1
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.08.2019, 17:01
DLD, у HitTest есть свойство hitTestResult.ChartElementType в нём содержится тип того что Вам приходит, если там не DataPoint то вы нажимаете не по графику, а скорей всего по свободной области "где-то рядом"

p.s. список того куда можно так "нажать": https://docs.microsoft.com/ru-... mework-4.8
0
5 / 4 / 2
Регистрация: 24.09.2016
Сообщений: 423
27.08.2019, 17:02  [ТС]
SeIZVeIZ, студия не ругается. Переделал Ваш код (чтобы найти причину)
C#
1
2
3
4
5
6
7
8
9
var hitTestResult = chrt.HitTest(e.X, e.Y);
            if (hitTestResult.Object != null) 
            {
               if (hitTestResult.Object is DataPoint point)
               {
                  DateTime xValue = DateTime.FromOADate(point.XValue);
                  VerticalLineText.Text = xValue.ToString();
               }
            }
Первое условие - выполняется, второе - нет. Выходит метод HitTest "прописан в моей студии"
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.08.2019, 17:04
DLD, я Вам про студию уже ничего не говорил больше, читайте внимательнее что от Вас хотят.
0
5 / 4 / 2
Регистрация: 24.09.2016
Сообщений: 423
27.08.2019, 17:05  [ТС]
SeIZVeIZ, диаграмма на весь экран... Промахнуться мимо графика - невозможно
Извините что был невнимателен
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.08.2019, 17:08
DLD, ещё раз на пальцах:
1) Ставите точку остановке на строке if (hitTestResult.Object is DataPoint point)
2) Нажимаете в студии F5
3) Нажимаете в программе туда куда вы жмёте
4) Как только попадает на точку остановки наводите на hitTestResult разворачиваете окно и смотрите что написано в ChartElementType
5) Показываете это значение сюда
1
5 / 4 / 2
Регистрация: 24.09.2016
Сообщений: 423
27.08.2019, 17:25  [ТС]
SeIZVeIZ,
C#
1
ChartElementType = PlottingArea
Добавлено через 1 минуту
Прописал такой код
C#
1
var d = chrt.Series[0].Points.First();
вот значение переменной d "{{X=0, Y={110.698, 110.776, 110.762, 110.701}}}". Но вместе с тем d.AxisLabel правильно указывает на дату "07.08.2017 01:00:00.000". Вот бы как-то извлечь.
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.08.2019, 17:29
Лучший ответ Сообщение было отмечено DLD как решение

Решение

Цитата Сообщение от DLD Посмотреть сообщение
ChartElementType = PlottingArea

а теперь читаем:
Область построения, которая представляет собой область диаграммы, исключая оси, подписи и прочие подобные элементы. Также исключаются области, которые могут быть заняты точками данных.
внимание вопрос: куда вы нажимаете? (подсказка это не туда куда бы Вам хотелось)

Добавлено через 1 минуту
Покажите графический Ваш график и куда вы на нём нажимаете
1
5 / 4 / 2
Регистрация: 24.09.2016
Сообщений: 423
27.08.2019, 17:55  [ТС]
SeIZVeIZ, график в моем пост №13 на первой странице этой темы. Выходит мне нужно сначала доработать основной код, а потом рисовать линии. Обратил внимание. Tab и chart добавляются динамически без проблем. Но когда рисую линии на chart (если создано более одной вкладки !) - то они появляются на тех chart, которые на "неоткрытых" в данный момент вкладках. Спасибо большое за участие.

Добавлено через 8 минут
Видимо координата X попадает как-то в код с того Tab (созданного, но не открытого), где еще нет chart
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.08.2019, 17:55

Изменить свойства контролла
Народ, подскажите как изменить свойства контролла по его именю. Например. Мне нужно динамически в программе поменять свойство Visible...

Описание свойства контролла
Вопрос таков кто писал контроллы при написании свойства, что нужно написать чтобы выдать описание в подсказке свойства при готовом...

Ограничение области перемещение контролла
Здравствуйте! В общем нужно сдлеать так, что бы pictureBox2 не могла выйти за пределы pictureBox1, при этом она не скакала в центр, и без...

Размещение программно контролла на форме
Всем привет. Подскажите можно или нет реализовать задуманное, а если ДА, то как. Есть много своих котроллов в виде dll. Все они созданы на...

Сохранение динамически созданного контролла
Как это можно осуществить и вообще возможно ли?


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

Или воспользуйтесь поиском по форуму:
33
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru