Сделать безграничную форму подвижной?

Я - также поклонник FMDatabase, хотя я должен был настроить свою собственную версию его. Мои приложения используют слой вокруг этого, я записал, назвал ArchDBObject, который прозрачно преобразовывает объекты в и от представления базы данных; я думаю о выпуске его в некоторой форме, но я действительно не решил как все же.

В любом случае, FMDatabase может иметься в https://github.com/ccgus/fmdb.

101
задан Zoe 19 June 2018 в 07:53
поделиться

4 ответа

This article on CodeProject details a technique. Is basically boils down to:

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern bool ReleaseCapture();

private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{     
    if (e.Button == MouseButtons.Left)
    {
        ReleaseCapture();
        SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    }
}

This essentially does exactly the same as grabbing the title bar of a window, from the window manager's point of view.

226
ответ дан 24 November 2019 в 04:35
поделиться

use MouseDown, MouseMove and MouseUp. You can set a variable flag for that. I have a sample, but I think you need to revise.

I am coding the mouse action to a panel. Once you click the panel, your form will move with it.

//Global variables;
private bool _dragging = false;
private Point _offset;
private Point _start_point=new Point(0,0);


private void panel1_MouseDown(object sender, MouseEventArgs e)
{
   _dragging = true;  // _dragging is your variable flag
   _start_point = new Point(e.X, e.Y);
}

private void panel1_MouseUp(object sender, MouseEventArgs e)
{
   _dragging = false; 
}

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
  if(_dragging)
  {
     Point p = PointToScreen(e.Location);
     Location = new Point(p.X - this._start_point.X,p.Y - this._start_point.Y);     
  }
}
19
ответ дан 24 November 2019 в 04:35
поделиться

WPF only


don't have the exact code to hand, but in a recent project I think I used MouseDown event and simply put this:

frmBorderless.DragMove();

Window.DragMove Method (MSDN)

11
ответ дан 24 November 2019 в 04:35
поделиться

Нет свойства, которое можно перевернуть, чтобы это произошло просто волшебным образом. Посмотрите на события формы, и становится довольно тривиально реализовать это, установив this.Top и this.Left . В частности, вы захотите посмотреть на MouseDown , MouseUp и MouseMove .

4
ответ дан 24 November 2019 в 04:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: