سلام
بالاخره تازه امشب کمی وقت کردم و روی مشکل کار کردم ...نقل قول:
... یعنی هی تکون میخوره ...
کد فعلی دستورات تغییر محل خود دات نت را از کار انداخته و خودش اینکار را انجام میدهد.
نتیجه آن است که میتوان قبل از اعمال محل جدید این عدد را اصلاح کرد.
(نه اینکه فرم حرکت کند و بعد تازه ما اصلاحش کنیم.)
این کد را تست کنید و در صورت نیاز بهینه و یا با شرایط خودتان اصلاح کنید:
(بخش align code جهت تطبیق با شرایط خودتان است)کد:private System.Drawing.Point m_FirtsLocation = new System.Drawing.Point(-1, -1);
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
private static extern bool ReleaseCapture();
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
private static extern IntPtr SetCapture(IntPtr hwnd);
protected override void WndProc(ref Message m)
{
if ((m.Msg == 161) && (m.WParam.ToInt32() == 2))
{
this.m_FirtsLocation = System.Windows.Forms.Control.MousePosition;
ReleaseCapture();
SetCapture(this.Handle);
return;
}
if (this.m_FirtsLocation.X >= 0)
{
if ((System.Windows.Forms.Control.MouseButtons & MouseButtons.Left) > 0)
{
var newlocation = System.Windows.Forms.Control.MousePosition;
var pos = new System.Drawing.Point(this.Left + newlocation.X - this.m_FirtsLocation.X, this.Top + newlocation.Y - this.m_FirtsLocation.Y);
//... align code ...
if (pos.X <= 200) pos.X = 0;
this.Location = pos;
//return;
}
else
{
this.m_FirtsLocation.X = -1;
this.UpdateBounds();
ReleaseCapture();
}
}
base.WndProc(ref m);
}
موفق باشید.