Câu trả lời được chấp nhận là một thủ thuật mát mẻ, nhưng nó không phải lúc nào hoạt động nếu mẫu được bao phủ bởi một điều khiển con Fill-cập cảng giống như một Panel (hoặc derivates) ví dụ, bởi vì sự kiểm soát này sẽ ăn tất cả hầu hết các tin nhắn Windows.
Đây là một phương pháp đơn giản mà làm việc cũng trong trường hợp này: lấy được sự kiểm soát trong câu hỏi (sử dụng lớp này thay vì một trong những tiêu chuẩn) một tay cầm thông điệp chuột như thế này:
private class MyTableLayoutPanel : Panel // or TableLayoutPanel, etc.
{
private Point _mouseDown;
private Point _formLocation;
private bool _capture;
// NOTE: we cannot use the WM_NCHITTEST/HTCAPTION trick because the table is in control, not the owning form...
protected override void OnMouseDown(MouseEventArgs e)
{
_capture = true;
_mouseDown = e.Location;
_formLocation = ((Form)TopLevelControl).Location;
}
protected override void OnMouseUp(MouseEventArgs e)
{
_capture = false;
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (_capture)
{
int dx = e.Location.X - _mouseDown.X;
int dy = e.Location.Y - _mouseDown.Y;
Point newLocation = new Point(_formLocation.X + dx, _formLocation.Y + dy);
((Form)TopLevelControl).Location = newLocation;
_formLocation = newLocation;
}
}
}
Nguồn
2014-01-31 17:20:21
Điều này làm cho menu ngữ cảnh không khả dụng. –
Tác phẩm này hoạt động, nhưng nếu màn hình giật gân có các nút điều khiển (nói nhãn), thì việc nhấp vào nhãn sẽ không di chuyển nó. Làm thế nào để quản lý đặc biệt này nếu giật gân có một số điều khiển? – supafly