📄 formmove.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
using System.Drawing;
namespace MoveForm
{
public partial class FormMove : Component
{
private Form form;
private Thread thread;
public Form Form
{
get
{
return this.form;
}
set
{
Thread thread = new Thread(new ThreadStart(Formmove));
thread.Start();
this.form = value;
}
}
public FormMove() {}
internal AnchorStyles dockside = AnchorStyles.None;
private bool IsOrg = false;
private Rectangle lastBoard;
private const int Docking = 0;
private const int Pre_docking = 1;
private const int OFF = 2;
private int status = 2;
private void Formmove()
{
while (true)
{
if (this.form != null)
{
InitializeComponent();
break;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
thread = new Thread(new ThreadStart(dong));
thread.Start();
}
private void getdockside()
{
if (this.form.Top <= 0)
{
dockside = AnchorStyles.Top;
if (this.form.Bounds.Contains(Cursor.Position))
status = Pre_docking;
else
status = Docking;
}
else if (this.form.Left <= 0)
{
dockside = AnchorStyles.Left;
if (this.form.Bounds.Contains(Cursor.Position))
status = Pre_docking;
else
status = Docking;
}
else if (this.form.Left >= Screen.PrimaryScreen.Bounds.Width - this.form.Width)
{
dockside = AnchorStyles.Right;
if (this.form.Bounds.Contains(Cursor.Position))
status = Pre_docking;
else
status = Docking;
}
else
{
dockside = AnchorStyles.None;
status = OFF;
}
}
public void dong()
{
while (true)
{
if(this.form != null)
if (this == null || IsOrg == false)
{
return;
}
if (this.form.WindowState != FormWindowState.Minimized) //以保証最小化時,能回復到原先的狀態
{
if (this.form.Bounds.Contains(Cursor.Position))
{
switch (dockside)
{
case AnchorStyles.Top:
if (status == Docking)
this.form.Location = new Point(this.form.Location.X, 0);
break;
case AnchorStyles.Right:
if (status == Docking)
this.form.Location = new Point(Screen.PrimaryScreen.Bounds.Width - this.form.Width, 1);
if (this.form.Left < Screen.PrimaryScreen.Bounds.Width - this.form.Width)
{
if (IsOrg == true && status == OFF)
{
if (this.form.Bounds.Width != lastBoard.Width || this.form.Bounds.Height != lastBoard.Height)
{
this.form.Size = new Size(lastBoard.Width, lastBoard.Height);
}
}
}
break;
case AnchorStyles.Left:
if (status == Docking)
this.form.Location = new Point(0, 1);
break;
}
}
else
{
switch (dockside)
{
case AnchorStyles.Top:
this.form.Location = new Point(this.form.Location.X, (this.form.Height - 4) * (-1));
break;
case AnchorStyles.Right:
this.form.Size = new Size(this.form.Width, Screen.PrimaryScreen.WorkingArea.Height);
this.form.Location = new Point(Screen.PrimaryScreen.Bounds.Width - 4, 1);
break;
case AnchorStyles.Left:
this.form.Size = new Size(this.form.Width, Screen.PrimaryScreen.WorkingArea.Height);
this.form.Location = new Point((-1) * (this.form.Width - 4), 1);
break;
case AnchorStyles.None:
if (IsOrg == true && status == OFF)
{
if (this.form.Bounds.Width != lastBoard.Width || this.form.Bounds.Height != lastBoard.Height)
{
this.form.Size = new Size(lastBoard.Width, lastBoard.Height);
}
}
break;
}
}
}
}
}
private void form_LocationChanged(object sender, EventArgs e)
{
getdockside();
if (IsOrg == false)
{
lastBoard = this.form.Bounds;
IsOrg = true;
}
}
private void form_SizeChanged(object sender, EventArgs e)
{
if (IsOrg == true && status == OFF)
{
lastBoard = this.form.Bounds;
}
}
private void form_FormClosed(object sender, FormClosedEventArgs e)
{
thread.Abort();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -