- WM_LBUTTONDBLCLK message
- Parameters
- Return value
- Remarks
- Отличия одиночных и двойных щелчков (Windows Forms .NET) How to distinguish between clicks and double-clicks (Windows Forms .NET)
- Выполнение отката щелчка кнопкой мыши To roll back a click action
- Различение щелчков To distinguish between clicks
- Control. Double Click Событие
- Определение
- Тип события
- Примеры
- Комментарии
- Примечания для тех, кто наследует этот метод
WM_LBUTTONDBLCLK message
Posted when the user double-clicks the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.
A window receives this message through its WindowProc function.
Parameters
Indicates whether various virtual keys are down. This parameter can be one or more of the following values.
Value | Meaning |
---|---|
MK_CONTROL 0x0008 | The CTRL key is down. |
MK_LBUTTON 0x0001 | The left mouse button is down. |
MK_MBUTTON 0x0010 | The middle mouse button is down. |
MK_RBUTTON 0x0002 | The right mouse button is down. |
MK_SHIFT 0x0004 | The SHIFT key is down. |
MK_XBUTTON1 0x0020 | The first X button is down. |
MK_XBUTTON2 0x0040 | The second X button is down. |
The low-order word specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
The high-order word specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
Return value
If an application processes this message, it should return zero.
Remarks
Use the following code to obtain the horizontal and vertical position:
As noted above, the x-coordinate is in the low-order short of the return value; the y-coordinate is in the high-order short (both represent signed values because they can take negative values on systems with multiple monitors). If the return value is assigned to a variable, you can use the MAKEPOINTS macro to obtain a POINTS structure from the return value. You can also use the GET_X_LPARAM or GET_Y_LPARAM macro to extract the x- or y-coordinate.
Do not use the LOWORD or HIWORD macros to extract the x- and y- coordinates of the cursor position because these macros return incorrect results on systems with multiple monitors. Systems with multiple monitors can have negative x- and y- coordinates, and LOWORD and HIWORD treat the coordinates as unsigned quantities.
Only windows that have the CS_DBLCLKS style can receive WM_LBUTTONDBLCLK messages, which the system generates whenever the user presses, releases, and again presses the left mouse button within the system’s double-click time limit. Double-clicking the left mouse button actually generates a sequence of four messages: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK, and WM_LBUTTONUP.
Отличия одиночных и двойных щелчков (Windows Forms .NET) How to distinguish between clicks and double-clicks (Windows Forms .NET)
Как правило, событие одиночного щелчка инициирует действие пользовательского интерфейса, а событие двойного щелчка расширяет его. Typically, a single click initiates a user interface action and a double-click extends the action. Например, одним щелчком мыши обычно выбирается элемент, а двойным щелчком мыши этот элемент изменяется. For example, one click usually selects an item, and a double-click edits the selected item. Однако события щелчков Windows Forms непросто приспособить к сценарию, в котором щелчок и двойной щелчок выполняют несовместимые действия, поскольку действие, привязанное к событию Click или MouseClick, выполняется перед действием, привязанным к событию DoubleClick или MouseDoubleClick. However, the Windows Forms click events do not easily accommodate a scenario where a click and a double-click perform incompatible actions, because an action tied to the Click or MouseClick event is performed before the action tied to the DoubleClick or MouseDoubleClick event. В этом разделе показаны два способа решения этой проблемы. This topic demonstrates two solutions to this problem.
Документация для Руководства по рабочему столу по .NET 5 (и .NET Core) находится в разработке. The Desktop Guide documentation for .NET 5 (and .NET Core) is under construction.
Одним из решений является обработка события двойного щелчка и откат действий при обработке события щелчка. One solution is to handle the double-click event and roll back the actions in the handling of the click event. В редких случаях может потребоваться имитировать поведение при одинарном и двойном щелчке при обработке событий MouseDown и с помощью свойств DoubleClickTime и DoubleClickSize класса SystemInformation. In rare situations you may need to simulate click and double-click behavior by handling the MouseDown event and by using the DoubleClickTime and DoubleClickSize properties of the SystemInformation class. Производится измерение времени между щелчками мышью и, если второе нажатие происходит до того, как DoubleClickTime достигнет значения и кнопка мыши была нажата, когда курсор находился в прямоугольнике, заданном DoubleClickSize, то выполняется действие двойного щелчка; в противном случае выполняется действие щелчка. You measure the time between clicks and if a second click occurs before the value of DoubleClickTime is reached and the click is within a rectangle defined by DoubleClickSize, perform the double-click action; otherwise, perform the click action.
Выполнение отката щелчка кнопкой мыши To roll back a click action
Убедитесь, что элемент управления, с которым вы работаете, имеет стандартное поведение при двойном щелчке мышью. Ensure that the control you are working with has standard double-click behavior. В противном случае задействуйте элемент управления с помощью метода SetStyle. If not, enable the control with the SetStyle method. Обработайте событие двойного щелчка и откат к одиночному щелчку кнопкой мыши, а также действие двойного щелчка. Handle the double-click event and roll back the click action as well as the double-click action. В следующем примере кода показано, как создать пользовательскую кнопку с включенным двойным щелчком мыши, а также как откатить к одиночному щелчку в коде обработки событий двойного щелчка. The following code example demonstrates a how to create a custom button with double-click enabled, as well as how to roll back the click action in the double-click event handling code.
В этом примере кода используется новый элемент управления »Кнопка», который обеспечивает двойной щелчок: This code example uses a new button control that enables double-clicks:
В следующем коде показано, как форма изменяет стиль границы на основе щелчка или двойного щелчка нового элемента управления «Кнопка»: The following code demonstrates how a form changes the style of border based on a click or double-click of the new button control:
Различение щелчков To distinguish between clicks
Обработайте событие MouseDown и определите расположение и временной интервал между щелчками с помощью свойства SystemInformation и компонента Timer. Handle the MouseDown event and determine the location and time span between clicks using the SystemInformation property and a Timer component. Выполните необходимые действия в зависимости от того, имеет ли место щелчок или двойной щелчок кнопкой мыши. Perform the appropriate action depending on whether a click or double-click takes place. В следующем примере кода показано, как это сделать. The following code example demonstrates how this can be done.
Control. Double Click Событие
Определение
Происходит при двойном щелчке элемента управления. Occurs when the control is double-clicked.
Тип события
Примеры
В следующем примере кода событие объекта используется DoubleClick ListBox для загрузки текстовых файлов, перечисленных в элементе, ListBox в TextBox элемент управления. The following code example uses the DoubleClick event of a ListBox to load text files listed in the ListBox into a TextBox control.
Комментарии
Двойной щелчок определяется параметрами мыши операционной системы пользователя. A double-click is determined by the mouse settings of the user’s operating system. Пользователь может задать время между нажатиями кнопки мыши, которые будут считаться двойным щелчком, а не двумя отдельными щелчками. The user can set the time between clicks of a mouse button that should be considered a double-click rather than two clicks. ClickСобытие возникает каждый раз при двойном щелчке элемента управления. The Click event is raised every time a control is double-clicked. Например, если у вас есть обработчики событий для Click DoubleClick событий и Form , Click DoubleClick события и вызываются при двойном щелчке формы и вызове обоих методов. For example, if you have event handlers for the Click and DoubleClick events of a Form, the Click and DoubleClick events are raised when the form is double-clicked and both methods are called. Если элемент управления дважды щелкнул, и этот элемент управления не поддерживает DoubleClick событие, Click событие может быть вызвано дважды. If a control is double-clicked and that control does not support the DoubleClick event, the Click event might be raised twice.
Чтобы StandardDoubleClick StandardClick ControlStyles true это событие было создано, необходимо задать значения и для параметра. You must set the StandardDoubleClick and StandardClick values of ControlStyles to true for this event to be raised. Для этих значений может быть уже установлено значение, true Если вы наследуете от существующих элементов управления Windows Forms. These values might already be set to true if you are inheriting from existing Windows Forms controls.
Следующие события не вызываются для TabControl класса, если в коллекции не существует хотя бы одного TabPage из них TabControl.TabPages : Click , DoubleClick , MouseDown , MouseUp , MouseHover , MouseEnter MouseLeave и MouseMove . The following events are not raised for the TabControl class unless there is at least one TabPage in the TabControl.TabPages collection: Click, DoubleClick, MouseDown, MouseUp, MouseHover, MouseEnter, MouseLeave and MouseMove. Если в коллекции есть хотя бы один TabPage элемент, и пользователь взаимодействует с заголовком элемента управления вкладки (где TabPage отображаются имена), TabControl вызывается соответствующее событие. If there is at least one TabPage in the collection, and the user interacts with the tab control’s header (where the TabPage names appear), the TabControl raises the appropriate event. Однако если взаимодействие с пользователем происходит в клиентской области страницы вкладки, TabPage вызывается соответствующее событие. However, if the user interaction is within the client area of the tab page, the TabPage raises the appropriate event.
Дополнительные сведения об обработке событий см. в разделе обработка и вызов событий. For more information about handling events, see Handling and Raising Events.
Примечания для тех, кто наследует этот метод
Наследование от стандартного элемента управления Windows Forms и изменение StandardClick значений или в StandardDoubleClick ControlStyles to true может привести к непредвиденному поведению или не иметь никакого влияния на все, если элемент управления не поддерживает Click события или DoubleClick . Inheriting from a standard Windows Forms control and changing the StandardClick or StandardDoubleClick values of ControlStyles to true can cause unexpected behavior or have no effect at all if the control does not support the Click or DoubleClick events.
В следующей таблице перечислены Windows Formsные элементы управления и события, которые Click DoubleClick вызываются в ответ на указанное действие мыши. The following table lists Windows Forms controls and which event (Click or DoubleClick) is raised in response to the mouse action specified.
Control Control | Щелчок левой кнопкой мыши Left Mouse Click | Двойной щелчок левой кнопкой мыши Left Mouse Double Click | Щелчок правой кнопкой мыши Right Mouse Click | Двойной щелчок правой кнопкой мыши Right Mouse Double Click | Щелчок средней кнопкой мыши Middle Mouse Click | Двойной щелчок средней кнопкой мыши Middle Mouse Double Click | Щелчок мыши XButton1 XButton1 Mouse Click | Double-Click мыши XButton1 XButton1 Mouse Double-Click | Щелчок мыши XButton2 XButton2 Mouse Click | Double-Click мыши XButton2 XButton2 Mouse Double-Click |
---|---|---|---|---|---|---|---|---|---|---|
MonthCalendar, MonthCalendar, DateTimePicker, DateTimePicker, RichTextBox, RichTextBox, HScrollBar, HScrollBar, VScrollBar | нет none | нет none | нет none | нет none | нет none | нет none | нет none | нет none | нет none | нет none |
Button, Button, CheckBox, CheckBox, RadioButton | Щелкните Click | Щелкните, щелкните Click, Click | нет none | нет none | нет none | нет none | нет none | нет none | нет none | нет none |
ListBox, ListBox, CheckedListBox, CheckedListBox, ComboBox | Щелкните Click | Щелкните, DoubleClick Click, DoubleClick | нет none | нет none | нет none | нет none | нет none | нет none | нет none | нет none |
TextBox, TextBox, DomainUpDown, DomainUpDown, NumericUpDown | Щелкните Click | Щелкните, DoubleClick Click, DoubleClick | нет none | нет none | нет none | нет none | нет none | нет none | нет none | нет none |
\* TreeView, \* TreeView, \* ListView \* ListView | Щелкните Click | Щелкните, DoubleClick Click, DoubleClick | Щелкните Click | Щелкните, DoubleClick Click, DoubleClick | нет none | нет none | нет none | нет none | нет none | нет none |
ProgressBar, ProgressBar, TrackBar | Щелкните Click | Щелкните, щелкните Click, Click | Щелкните Click | Щелкните, щелкните Click, Click | Щелкните Click | Щелкните, щелкните Click, Click | Щелкните Click | Щелкните, щелкните Click, Click | Щелкните Click | Щелкните, щелкните Click, Click |
Form, Form, DataGrid, DataGrid, Label, Label, LinkLabel, LinkLabel, Panel, Panel, GroupBox, GroupBox, PictureBox, PictureBox, Splitter, Splitter, StatusBar, StatusBar, ToolBar, ToolBar, TabPage, TabPage, ** TabControl | Щелкните Click | Щелкните, DoubleClick Click, DoubleClick | Щелкните Click | Щелкните, DoubleClick Click, DoubleClick | Щелкните Click | Щелкните, DoubleClick Click, DoubleClick | Щелкните Click | Щелкните, DoubleClick Click, DoubleClick | Щелкните Click | Щелкните, DoubleClick Click, DoubleClick |
* Указатель мыши должен находиться над дочерним объектом ( TreeNode или ListViewItem ). * The mouse pointer must be over a child object (TreeNode or ListViewItem).
* * В TabControl коллекции должен быть по крайней мере один TabPage TabPages . ** The TabControl must have at least one TabPage in its TabPages collection.