PopupMenu в Datagrid'e

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

PopupMenu в Datagrid'e

Сообщение VVitafresh » 10.08.2007 (Пт) 10:19

Извиняюсь за возможно ламерский вопрос, но что-то я в трех соснах заблудился :oops:

Хочу по правому щелчку в датагриде вызывать PopupMenu, но перед этим текущей делать ту запись, по которой щелкнули.

Если вызов PopupMenu поместить в событие MouseDown (или MouseUp), то просто вызывается меню (что естественно). А как перед этим текущей сделать ту строчку таблицы (запись), по которой щелкнули?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 10.08.2007 (Пт) 10:59

ну спровоцируй сперва клик левой кнопкой мыши, а потом вызови меню:)
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 10.08.2007 (Пт) 11:11

Пока так и сделал.
Код: Выделить всё
Private Sub grdResult_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbRightButton Then
        mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, cButt, dwEI
        DoEvents 'Сначала не допер, что нужно DoEvents
        PopupMenu mnuPopupPutty
    End If
End Sub

Думал, может быть без привлечения WinAPI можно обойтись стандартными событиями :roll:
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 10.08.2007 (Пт) 11:25

Можно. Причем F2 рулит неимоверно.
Код: Выделить всё
Private Sub grdResult_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 2 Then
        grdResult.Bookmark = grdResult.RowBookmark(grdResult.RowContaining(Y))
        PopupMenu mnuPopupPutty
    End If
End Sub
Лучший способ понять что-то самому — объяснить это другому.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 10.08.2007 (Пт) 11:34

Antonariy, супер! Это именно то, чего я хотел.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.08.2007 (Пт) 12:02

Это плохой код. Он требует рекордсета, поддерживающего закладки. А ещё он рассчитан на то, что форма имеет систему координат в твипах. А ещё он не учитывает ситуацию, когда кликнули не по строке. А ещё он работает по MouseDown.

Более хороший код --
Код: Выделить всё
Private Sub grdFinance_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
  Dim r As Long
 
  r = grdFinance.RowContaining(Me.ScaleY(y, vbTwips, Me.ScaleMode))
  If r >= 0 Then
    grdFinance.Row = r
    Me.PopupMenu frmMain.mnuGrid
  End If
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 10.08.2007 (Пт) 12:10

GSerg, спасибо за существенное уточнение. Уже учел в коде.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 32

    TopList