Control Properties


.NET Framework Class Library
Control..::.Capture Property

Gets or sets a value indicating whether the control has captured the mouse.

Namespace:  System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)
Syntax

Visual Basic (Declaration)
<BrowsableAttribute(False)> _
Public Property Capture As Boolean
Visual Basic (Usage)
Dim instance As Control
Dim value As Boolean

value = instance.Capture

instance.Capture = value
C#
[BrowsableAttribute(false)]
public bool Capture { get; set; }
Visual C++
[BrowsableAttribute(false)]
public:
property bool Capture {
    bool get ();
    void set (bool value);
}
JScript
public function get Capture () : boolean
public function set Capture (value : boolean)

Property Value

Type: System..::.Boolean
true if the control has captured the mouse; otherwise, false.
Remarks

When a control has captured the mouse, it receives mouse input whether or not the cursor is within its borders. The mouse is typically only captured during drag operations.

Only the foreground window can capture the mouse. When a background window attempts to do so, the window receives messages only for mouse events that occur when the mouse cursor is within the visible portion of the window. Also, even if the foreground window has captured the mouse, the user can still click another window, bringing it to the foreground.

When the mouse is captured, shortcut keys should not work.

Examples

The following code example demonstrates the Capture property. To run this example paste the following code in a form containing a Label named label1 and two ListBox controls named listbox1 and listbox2. Ensure the form and controls' MouseDown event is associated with the method in this example.

Visual Basic
'This method handles the mouse down event for all the controls on the form.  When a control has
'captured the mouse, the control's name will be output on label1.
Private Sub Control_MouseDown(ByVal sender As System.Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown, _
    label1.MouseDown, listbox1.MouseDown, listbox2.MouseDown
    Dim control As Control = CType(sender, Control)
    If (control.Capture) Then
        label1.Text = control.Name & " has captured the mouse"
    End If
End Sub
C#
    // This method handles the mouse down event for all the controls on the form.  
    // When a control has captured the mouse
    // the control's name will be output on label1.
    private void Control_MouseDown(System.Object sender, 
        System.Windows.Forms.MouseEventArgs e)
    {
        Control control = (Control) sender;
        if (control.Capture)
        {
            label1.Text = control.Name+" has captured the mouse";
        }
    }
Visual C++
// This method handles the mouse down event for all the controls on the form.  
// When a control has captured the mouse
// the control's name will be output on label1.
void Control_MouseDown( System::Object^ sender,
   System::Windows::Forms::MouseEventArgs^ /*e*/ )
{
   Control^ control = (Control^)(sender);
   if ( control->Capture )
   {
      label1->Text = control->Name + " has captured the mouse";
   }
}
.NET Framework Security

Platforms

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Version Information

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 3.5, 2.0, 1.0
See Also

Reference

Tags :


Community Content

RonOnMsdn
Capture is set automatically before OnMouseDown
If you use your debugger, you'll see that Windows will set the Capture property to 'true' before the Control's OnMouseDown is called and set it to 'false' after the OnMouseUp. So, the default behavior is to capture the cursor when dragging on a Control. This allows auto-scroll behavior to be implemented without having to set Capture at all. You have to go out of your way to not capture the mouse.

The other factoid that I'd like to share is that if you have a bug where your mouse click events are being caught/eaten/trapped/absorbed across the whole screen, then there's probably an errant call to Control.Capture = true. For example, in our code base, someone was calling Capture = true in a Control's constructor, thinking that the Capture property was a persistent permanent property and this led to the bug where the first mouse click anywhere on the screen was being sent to this buggy Control. The second and subsequent mouse click events were routed as expected.


Page view tracker