Выберите элемент ListBox при щелчке правой кнопкой мыши в Word VBA - PullRequest
2 голосов
/ 01 февраля 2012

Я разрабатываю проект в Word 2003 с VBA. У меня есть несколько элементов ListBox с несколькими записями (даты). При щелчке правой кнопкой мыши я бы хотел, чтобы всплывающее окно ввода отображалось, где пользователь может изменить выбранную дату. Это работает хорошо, пока конкретный элемент уже сфокусирован (не только выбран, но и сфокусирован). Но если вы щелкнете правой кнопкой мыши по элементу без фокуса, появится окно, в котором будет отображаться дата измененной записи, а не та, которую вы щелкнули правой кнопкой мыши.

Я нашел этот ответ (http://www.vbarchiv.net/tipps/tipp_920-rechtsklick-in-der-standard-listbox-erkennen.html), но это не возможно в VBA. У кого-нибудь есть решение для VBA?

Мне на самом деле нужно поменять сфокусированный элемент при щелчке правой кнопкой мыши, прежде чем появится окно.

Спасибо

1 Ответ

3 голосов
/ 01 февраля 2012

Обычно это делается с помощью Hit Testing, который списки не поддерживают, вот хакерский способ;

Добавьте еще один список с именем lbTest где-нибудь на форме, дважды щелкните его свойство BorderStyle, покавыглядит как пустая белая коробка, установите visible на false

Private LBI_HEIGHT As Long

Private Sub UserForm_Initialize()
   'get the height of a single list item in twips based on the fact the box will resize itself automatically;
   With lbTest
       .Width = 100
       .Height = 1
       .AddItem "X"
       LBI_HEIGHT = .Height
   End With

   'add test data
   Dim i As Long
   For i = 1 To 50
       ListBox1.AddItem "item " & i
   Next
End Sub

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
   'get the item at the Y coord based on the scroll position & item height
   Dim derivedIndex As Long
   derivedIndex = (Y \ LBI_HEIGHT) + ListBox1.TopIndex

   Me.Caption = derivedIndex & " = " & ListBox1.List(derivedIndex)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...