Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/103: Рейтинг темы: голосов - 103, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 20

Получение координат курсора на форме

02.04.2014, 17:45. Показов 20117. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я решил написать игру наподобие русской рыбалки и тут столкнулся с такой проблемой.Я бьюсь об заклад и не могу понять , как передать координаты курсора мышки поплавку(пока это у меня овал , соответственно у которого есть координаты х и у).Когда я пытаюсь передать значение курсора мыши выдаёт ошибки : " "X" не является членом "Microsoft.VisualBasic.PowerPacks.OvalSh ape"
"Y" не является членом "Microsoft.VisualBasic.PowerPacks.OvalSh ape" "

Вот отрывок кода программы :
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
    End Sub
    Friend WithEvents Timer1 As System.Windows.Forms.Timer
 
    Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
 
    End Sub
 
    Private Sub Form1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Click
        Timer1.Start()
        Timer1.Interval = 1
 
        OvalShape1.X = MousePosition.X
        OvalShape1.Y = MousePosition.Y
 
    End Sub
    Friend WithEvents ShapeContainer1 As Microsoft.VisualBasic.PowerPacks.ShapeContainer
    Friend WithEvents OvalShape1 As Microsoft.VisualBasic.PowerPacks.OvalShape
 
End Class
Хотелось бы что бы Вы мне растолковали где моя ошибка , ну и желательно код .
Заранее спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.04.2014, 17:45
Ответы с готовыми решениями:

Получение координат курсора в VB 2010
Здравствуйте! Прошу подсказать как в VB 2010 исправить код Public Class Form1 Private Declare Function GetCursorPos Lib...

Получение координат курсора в TextBox в пикселах
Не знаю, может эта штука называется по другому, но мне нужно узнать, если это возможно положение курсора... В виде Top и Left ...

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

11
 Аватар для dimsaratov
356 / 295 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
02.04.2014, 20:14
Лучший ответ Сообщение было отмечено _TUX_ как решение

Решение

VB.NET Скопировано
1
2
3
 Private Sub OvalShape1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OvalShape1.Click
       MessageBox.Show("Поплавок X=" & MousePosition.X & " Y=" & MousePosition.Y)
End Sub
или вместо
Цитата Сообщение от _TUX_ Посмотреть сообщение
OvalShape1.X = MousePosition.X
OvalShape1.Y = MousePosition.Y
VB.NET Скопировано
1
2
OvalShape1.Left = MousePosition.X
OvalShape1.Top = MousePosition.Y
2
Почетный модератор
 Аватар для Памирыч
23246 / 9158 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
02.04.2014, 20:48
Для получения координат курсора на форме используйте соответствующие события и параметр e

VB.NET Скопировано
1
2
3
4
5
    Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick
        If e.Button = Windows.Forms.MouseButtons.Left Then
            Me.Text = e.Location.ToString
        End If
    End Sub
2
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
24.04.2021, 01:38
Всем доброй ночи. У меня возникла очень близкая проблема, поэтому решил, что целесообразнее продолжить эту тему а не открывать новую.
Суть вопроса: на форме имеется график (Chart_Graf). Есть возможность растягивания его масштаба по оси дат (X). Для удобства решил добавить возможность прокручивания (перемещения вдоль оси X) его зажатой средней клавишей мыши когда он растянут и, соответственно, отображается только его часть. Код вроде верный, но что-то не работает, подозреваю что связано с отслеживанием положения курсора, но не пойму, как исправить.
VB.NET Скопировано
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
    Dim isMouseDown As Boolean = False  'Признак удерживания кнопки мыши
    Dim Start_X As Double               'Начальная позиция курсора
    Dim Temp_X As Double                'Позиция курсора при его перемещении (когда зажата кнопка мыши)
 
Private Sub Chart_Graf_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Chart_Graf.MouseDown
        'Нажата средняя кнопка мыши
        If e.Button = Windows.Forms.MouseButtons.Middle Then
            Start_X = Chart_Graf.ChartAreas("Default").Position.X
            isMouseDown = True
            Chart_Graf.Cursor = Cursors.Hand
        End If
End Sub
    
Private Sub Chart_Graf_MouseUp(sender As Object, e As MouseEventArgs) Handles Chart_Graf.MouseUp
        'Отпущена средняя кнопка мыши
        If e.Button = Windows.Forms.MouseButtons.Middle Then
            isMouseDown = False
            Chart_Graf.Cursor = Cursors.Default 'восстанавливаем вид курсора
        End If
End Sub
 
Private Sub Chart_Graf_MouseMove(sender As Object, e As MouseEventArgs) Handles Chart_Graf.MouseMove
        If isMouseDown Then     'Если кнопка мыши удерживается...
            'Вычисляем новые границы графика
            Temp_X = Chart_Graf.ChartAreas("Default").CursorX.Position  'Позиция курсора на графике
            Chart_Graf.ChartAreas("Default").AxisX.Minimum += Temp_X - Start_X
            Chart_Graf.ChartAreas("Default").AxisX.Maximum += Temp_X - Start_X
        End If
End Sub
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
24.04.2021, 14:18
Цитата Сообщение от Alex2005-10 Посмотреть сообщение
Есть возможность растягивания его масштаба по оси дат (X). Для удобства решил добавить возможность прокручивания (перемещения вдоль оси X) его зажатой средней клавишей мыши когда он растянут и, соответственно, отображается только его часть.
Полагаю, что речь идет о MSChart, а у него есть штатные возможности масштабирования и сдвига по оси X. Посмотрите пример https://www.cyberforum.ru/post13513007.html
Есть и другие (авторские) реализации масштабирования, например https://www.codeproject.com/Ar... n-MS-Chart
1
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
24.04.2021, 15:24
Спасибо, но, к сожалению, не то.... Хотя 2-я ссылка интересная и скорее всего потребуется мне позже. По поводу встроенной функции - я с ней копался, но мне она, как и автору кода по 2-й ссылке не подошла. Возможно дело в какой-то простой ошибке, с графиками я сейчас только начал разбираться.
Сейчас копаю код маленькими кусочками и немного в ступоре...
Простая проверка показывает, что курсор отслеживается, при наведении на график Label.Text меняются на NaN, при уходе с элемента - на "Out". Т.е. ошибка в получении координат курсора, но что не так, никак не пойму...
VB.NET Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
    'Указатель мыши перемещается по элементу
    Private Sub Chart_Graf_MouseMove(sender As Object, e As MouseEventArgs) Handles Chart_Graf.MouseMove
        'Получаем положение курсора на графике
        Label_X.Text = Chart_Graf.ChartAreas("Default").CursorX.Position
        Label_Y.Text = Chart_Graf.ChartAreas("Default").CursorY.Position
    End Sub
 
    'Указатель мыши покидает элемент
    Private Sub Chart_Graf_MouseLeave(sender As Object, e As EventArgs) Handles Chart_Graf.MouseLeave
        Label_X.Text = "Out X"
        Label_Y.Text = "Out Y"
    End Sub
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
24.04.2021, 16:10
Проверьте
VB.NET Скопировано
1
2
3
4
5
6
7
Private Sub Chart1_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseDown
    Debug.WriteLine("MouseDown:" & Chart1.ChartAreas(0).AxisX.PixelPositionToValue(e.X) & "/" & Chart1.ChartAreas(0).AxisY.PixelPositionToValue(e.Y))
End Sub
 
Private Sub Chart1_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseMove
    Debug.WriteLine("MouseMove:" & Chart1.ChartAreas(0).AxisX.PixelPositionToValue(e.X) & "/" & Chart1.ChartAreas(0).AxisY.PixelPositionToValue(e.Y))
End Sub
1
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
24.04.2021, 19:42
Вариант работает!
VB.NET Скопировано
1
2
3
4
5
6
    'Указатель мыши перемещается по элементу
    Private Sub Chart_Graf_MouseMove(sender As Object, e As MouseEventArgs) Handles Chart_Graf.MouseMove
        'Получаем положение курсора на графике
        Label_X.Text = Chart_Graf.ChartAreas("Default").AxisX.PixelPositionToValue(e.X)
        Label_Y.Text = Chart_Graf.ChartAreas("Default").AxisY.PixelPositionToValue(e.Y)
    End Sub
Но почему-то при некоторых положениях курсора вылетает с исключением:
System.ArgumentException: "Значение аргумента расположения должно быть в диапазоне от 0 до 100.
Имя параметра: position"
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
24.04.2021, 20:48
Если посмотреть на следующие методы, то станет понятно о каком интервале идет речь
Axis.GetPosition
Преобразует значение по оси в относительное положение (0–100%).
Axis.PositionToValue
Преобразует относительную координату вдоль оси в значение по этой оси.
1
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
24.04.2021, 21:22
Что делают методы вроде понятно, но вот почему возникает ошибка всё равно не понял....
Не должно её быть по идее...
В общем в итоге просто ограничил область вычисления по оси Y (отсёк кусок снизу вне осей но в области графика, в котором была ошибка). Это не очень-то правильно, но как сделать иначе мыслей нет...
VB.NET Скопировано
1
2
3
4
5
6
Private Sub Chart_Graf_MouseMove(sender As Object, e As MouseEventArgs) Handles Chart_Graf.MouseMove
        If e.Y < 530 Then
            Label_X.Text = Chart_Graf.ChartAreas(0).AxisX.PixelPositionToValue(e.X)
            Label_Y.Text = Chart_Graf.ChartAreas(0).AxisY.PixelPositionToValue(e.Y)
        End If
End Sub
0
4701 / 3655 / 856
Регистрация: 02.02.2013
Сообщений: 3,509
Записей в блоге: 2
24.04.2021, 21:27
М.б. так
VB.NET Скопировано
1
2
3
4
5
6
7
Private Sub Chart_Graf_MouseMove(sender As Object, e As MouseEventArgs) Handles Chart_Graf.MouseMove
    Try
        Label_X.Text = Chart_Graf.ChartAreas(0).AxisX.PixelPositionToValue(e.X)
        Label_Y.Text = Chart_Graf.ChartAreas(0).AxisY.PixelPositionToValue(e.Y)
    Catch ex As Exception
    End Try
End Sub
1
8 / 8 / 0
Регистрация: 07.06.2020
Сообщений: 90
24.04.2021, 21:41
Точно! Спасибо Вам большое! Забыл совсем про обработку исключений. Так логично и правильно!
Но почему ошибка возникает всё равно неясно... Просто интересно было бы это выяснить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2021, 21:41
Помогаю со студенческими работами здесь

Абсолютные значения координат курсора
Нужно открывать новую форму в позиции указанной курсором при клике на PictureBox. Пользуюсь вот такой неудобной конструкцией: Private...

Построение графиков и считывание координат расположения курсора
Здравствуйте, допустим у меня есть некий график построенный. Я вожу курсором по этому графику и при нажатии на кнопку мыши необходимо чтоб...

Получение координат с Chart
Как получить реальные координаты с Chart что бы над графиком разместить текстовое поле? Или есть возможность внутри текстовой анотации...

RichTextBox - получение текста перед/после курсора
Как из RichTextBox получить текст, находящийся до или после курсора? Надо что-то типа этого: Есть строка: слово1 слово2 слово3 ...

Загрузка собственного курсора в форме
Добрый вечер,столкнулся с проблемой: Me.Cursor = New Cursor(&quot;cursor3.cur&quot;)' загружаю курсор Выскакивает ошибка: Недопустимый формат...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер