над каким конролом сработало конктстное меню?

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

над каким конролом сработало конктстное меню?

Сообщение dklmn » 29.07.2005 (Пт) 8:39

У меня одно контексное меню повешено на форме на несколько контролов. Но, в обработчике контексного меню мне нужно знать, из какого конрола это контексное меню вызвано.
Проблема в том что все контерксное меню , насколько я понял , выскакивает ДО ТОГО как вызываеются события контрола
Click, GotFocus , KeyPress, MouseDown.
Как мне узнать то над каким конролом меню всплыло?
Просто неохота для каждого конрола рисовать свое меню с почти одинаковой функциональностью

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 29.07.2005 (Пт) 11:25

А как оно у тебя вызываетс то? Не из кода разве? Должна же быть у тебя где-то команда:

Код: Выделить всё

'Ctrl - имя контрола для которого вызывается меню
'Pos - позиция всплывающего меню
mnu.Show(Ctrl, Pos)


вот и информация о контроле, остается ее использовать
Весь мир матрица, а мы в нем потоки байтов!

dklmn
Обычный пользователь
Обычный пользователь
 
Сообщения: 51
Зарегистрирован: 23.03.2004 (Вт) 12:21

Сообщение dklmn » 29.07.2005 (Пт) 17:12

!Viper! писал(а):А как оно у тебя вызываетс то? Не из кода разве? Должна же быть у тебя где-то команда:

Код: Выделить всё
'Ctrl - имя контрола для которого вызывается меню
'Pos - позиция всплывающего меню
mnu.Show(Ctrl, Pos)


вот и информация о контроле, остается ее использовать

Не из кода,
у контрола есть проперти contextMenu
оно равно .... меню.
Вообщето у меня это все под Compact Framework, и у меня нет события типа RightMouseClick.
Может в этом дело?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.07.2005 (Сб) 7:27

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

mad_Max
Бывалый
Бывалый
 
Сообщения: 203
Зарегистрирован: 15.09.2002 (Вс) 21:17
Откуда: Russia, Cherepovets

Сообщение mad_Max » 30.07.2005 (Сб) 23:40

В Compact Framework у формы нет свойства ActiveControl. Проблема с невозникающими MouseDown и прочими событиями до появления меню известна, и чтобы обработать эти события, рекомендуется вызывать меню вручную. На самом деле MouseDown позволяет отловить нажатие "правой" кнопки мыши (e.Button = MouseButtons.Right), но это естественно не получится, если прогу запустить на КПК. Поэтому остается обработать MouseDown и использовать функцию вроде
Код: Выделить всё
   
Imports System.Runtime.InteropServices
<DllImport("coredll", EntryPoint:="GetCapture", SetLastError:=True)> Public Function GetCapture() As IntPtr
    End Function
    Public Structure SHRGINFO
        Public cbSize As Integer
        Public hwndClient As IntPtr
        Public pntDown As Point
        Public dwFlags As Integer
    End Structure
    <DllImport("aygshell")> Public Function SHRecognizeGesture(ByRef info As SHRGINFO) As Integer
    End Function
    Public Function TapHolded(ByVal c As Control, ByVal x As Integer, ByVal y As Integer) As Boolean
        Dim info As New SHRGINFO
        c.Capture = True
        With info
            .cbSize = Runtime.InteropServices.Marshal.SizeOf(info)
            .pntDown = New Point(x, y)
            .dwFlags = &H1
            .hwndClient = GetCapture()
        End With
        c.Capture = False
        Dim cmd As Integer = SHRecognizeGesture(info)
        Return (cmd = 1000)
    End Function

Если TapHolded = True, то можно рассматривать это как щелчок правой кнопки и показать меню, иначе - щелчок левой кнопки. Параметры: с - контрол, на котором произошло MouseDown, x, y - координаты (относительно контрола c), в которых надо показать соответствующую анимацию в виде точек. Теперь можно написать один обработчик MouseDown для всех контролов, в нем проверять TapHolded, а объект, для которого вызвано меню - sender в этом обработчике MouseDown.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 01.08.2005 (Пн) 9:09

PopUp Event, смотри Sender
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 01.08.2005 (Пн) 10:54

Sebas писал(а):PopUp Event, смотри Sender


Э нет! Здесь Sender - это контекстное меню! (И не только здесь, в любом обработчике событий, Sender - объект создающий событие)
Весь мир матрица, а мы в нем потоки байтов!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 01.08.2005 (Пн) 11:36

точняк, тады в mouseEnter Надо устанавливать последний объект...(((
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList