В настоящее время я пытаюсь воссоздать панель / формы стыковки визуальной студии. Я хочу применить ту же систему к другому проекту для обработки разных оконных представлений, но сначала я хочу воссоздать ее.
До сих пор я переключал свойство MDiParent между MainForm и null, но не смог воссоздать плавный переход, наблюдаемый в Visual Studio. Это всегда неприятно, и в половине случаев я узнаю, что событие MouseUP, к которому я привязываю переключатель, редко срабатывает (в настоящее время я использую событие изменения местоположения).
Чтобы переместить форму, я использовал этот удобный блок кода, который я нашел;
#region Form Movement
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
private void MoveForm()
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
#endregion
И для работы с док-станцией / отстыковкой я использую этот код;
private void DockToMain()
{
Point f = Form1.Main.PointToClient(this.Location);
Point newP = new Point(f.X - 25, f.Y - 51);
try { this.MdiParent = Form1.Main; } catch { }
this.Location = newP;
}
private void UnDockFromMain()
{
Point f = Form1.Main.PointToScreen(this.Location);
Point newP = new Point(f.X + 25, f.Y + 51);
try { this.MdiParent = null; } catch { }
this.Location = newP;
}
Есть ли способ воссоздать панель / форму док-станции в Winforms? Я вообще на правильном пути, или я не вижу лучшего пути?
janky
. Какое поведение вы на самом деле наблюдаете? Чтобы указать правильное местоположение для стыковки, вы не хотите использовать форму ... вместо этого найдите элемент управления MdiClient в форме MdiParent и используйте это. - person Idle_Mind   schedule 18.12.2017