網站首頁 編程語言 正文
實踐過程
效果
代碼
public partial class Frm_Libretto : Form
{
public Frm_Libretto()
{
InitializeComponent();
}
#region 公共變量
FrmClass Cla_FrmClass = new FrmClass();
#endregion
private void Frm_Libretto_Load(object sender, EventArgs e)
{
this.Top = FrmClass.Example_Play_Top;
this.Left = FrmClass.Example_Play_Left + FrmClass.Example_Play_Width;
Cla_FrmClass.FrmInitialize(this);
}
private void panel_Title_MouseDown(object sender, MouseEventArgs e)
{
FrmClass.CPoint = new Point(-e.X, -e.Y);
}
private void panel_Title_MouseMove(object sender, MouseEventArgs e)
{
FrmClass.Example_Assistant_AdhereTo = false;
FrmClass.Example_Libretto_AdhereTo = false;
Cla_FrmClass.FrmMove(this, e);
}
private void panel_Title_MouseUp(object sender, MouseEventArgs e)
{
Cla_FrmClass.FrmPlace(this);
}
}
public partial class Frm_ListBox : Form
{
public Frm_ListBox()
{
InitializeComponent();
}
#region 公共變量
FrmClass Cla_FrmClass = new FrmClass();
#endregion
private void Frm_ListBox_Load(object sender, EventArgs e)
{
this.Left = FrmClass.Example_Play_Left;
this.Top = FrmClass.Example_Play_Top + FrmClass.Example_Play_Height;
Cla_FrmClass.FrmInitialize(this);
}
private void panel_Title_MouseDown(object sender, MouseEventArgs e)
{
FrmClass.CPoint = new Point(-e.X, -e.Y);
}
private void panel_Title_MouseMove(object sender, MouseEventArgs e)
{
FrmClass.Example_Assistant_AdhereTo = false;
FrmClass.Example_List_AdhereTo = false;
Cla_FrmClass.FrmMove(this, e);
}
private void panel_Title_MouseUp(object sender, MouseEventArgs e)
{
Cla_FrmClass.FrmPlace(this);
}
}
public partial class Frm_Play : Form
{
public Frm_Play()
{
InitializeComponent();
}
#region 公共變量
FrmClass Cla_FrmClass = new FrmClass();
public static Form F_List = new Form();
public static Form F_Libretto = new Form();
public static Form F_Screen = new Form();
#endregion
private void Frm_Play_Load(object sender, EventArgs e)
{
//窗體位置的初始化
Cla_FrmClass.FrmInitialize(this);
}
private void panel_Title_MouseDown(object sender, MouseEventArgs e)
{
int Tem_Y = 0;
if (e.Button == MouseButtons.Left) //按下的是否為鼠標左鍵
{
Cla_FrmClass.FrmBackCheck(); //檢測各窗體是否連在一起
Tem_Y = e.Y;
FrmClass.FrmPoint = new Point(e.X, Tem_Y); //獲取鼠標在窗體上的位置,用于磁性窗體
FrmClass.CPoint = new Point(-e.X, -Tem_Y); //獲取鼠標在屏幕上的位置,用于窗體的移動
if (FrmClass.Example_List_AdhereTo) //如果與frm_ListBox窗體相連接
{
Cla_FrmClass.FrmDistanceJob(this, F_List); //計算窗體的距離差
if (FrmClass.Example_Assistant_AdhereTo) //兩個輔窗體是否連接在一起
{
Cla_FrmClass.FrmDistanceJob(this, F_Libretto); //計算窗體的距離差
}
}
if (FrmClass.Example_Libretto_AdhereTo) //如果與frm_Libretto窗體相連接
{
Cla_FrmClass.FrmDistanceJob(this, F_Libretto); //計算窗體的距離差
if (FrmClass.Example_Assistant_AdhereTo) //兩個輔窗體是否連接在一起
{
Cla_FrmClass.FrmDistanceJob(this, F_List); //計算窗體的距離差
}
}
}
}
private void panel_Title_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) //按下的是否為鼠標左鍵
{
Cla_FrmClass.FrmMove(this, e); //利用控件移動窗體
if (FrmClass.Example_List_AdhereTo) //如果frm_ListBox窗體與主窗體連接
{
Cla_FrmClass.ManyFrmMove(this, e, F_List); //磁性窗體的移動
Cla_FrmClass.FrmInitialize(F_List); //對frm_ListBox窗體的位置進行初始化
if (FrmClass.Example_Assistant_AdhereTo) //如果兩個子窗體連接在一起
{
Cla_FrmClass.ManyFrmMove(this, e, F_Libretto);
Cla_FrmClass.FrmInitialize(F_Libretto);
}
}
if (FrmClass.Example_Libretto_AdhereTo) //如果frm_Libretto窗體與主窗體連接
{
Cla_FrmClass.ManyFrmMove(this, e, F_Libretto);
Cla_FrmClass.FrmInitialize(F_Libretto);
if (FrmClass.Example_Assistant_AdhereTo)
{
Cla_FrmClass.ManyFrmMove(this, e, F_List);
Cla_FrmClass.FrmInitialize(F_List);
}
}
Cla_FrmClass.FrmInitialize(this);
}
}
private void panel_Title_MouseUp(object sender, MouseEventArgs e)
{
Cla_FrmClass.FrmPlace(this);
}
private void Frm_Play_Shown(object sender, EventArgs e)
{
//顯示列表窗體
F_List = new Frm_ListBox();
F_List.ShowInTaskbar = false;
FrmClass.Example_ListShow = true;
F_List.Show();
//顯示歌詞窗體
F_Libretto = new Frm_Libretto();
F_Libretto.ShowInTaskbar = false;
FrmClass.Example_LibrettoShow = true;
F_Libretto.Show();
F_Libretto.Left = this.Left + this.Width;
F_Libretto.Top = this.Top;
//各窗體位置的初始化
Cla_FrmClass.FrmInitialize(F_List);
Cla_FrmClass.FrmInitialize(F_Libretto);
}
private void panel_Close_Click(object sender, EventArgs e)
{
F_List.Close();
F_List.Dispose();
F_Libretto.Close();
F_Libretto.Dispose();
F_Screen.Close();
F_Screen.Dispose();
this.Close();
}
private void panel_Title_Click(object sender, EventArgs e)
{
F_List.Focus();
F_Libretto.Focus();
this.Focus();
}
}
class FrmClass
{
#region 磁性窗體-公共變量
//記錄窗體的隱藏與顯示
public static bool Example_ListShow = false;
public static bool Example_LibrettoShow = false;
public static bool Example_ScreenShow = false;
//記錄鼠標的當前位置
public static Point CPoint; //添加命名空間using System.Drawing;
public static Point FrmPoint;
public static int Example_FSpace = 10; //設置窗體間的距離
//Frm_Play窗體的位置及大小
public static int Example_Play_Top = 0;
public static int Example_Play_Left = 0;
public static int Example_Play_Width = 0;
public static int Example_Play_Height = 0;
public static bool Example_Assistant_AdhereTo = false; //輔助窗體是否磁性在一起
//Frm_ListBos窗體的位置及大小
public static int Example_List_Top = 0;
public static int Example_List_Left = 0;
public static int Example_List_Width = 0;
public static int Example_List_Height = 0;
public static bool Example_List_AdhereTo = false; //輔助窗體是否與主窗體磁性在一起
//Frm_Libretto窗體的位置及大小
public static int Example_Libretto_Top = 0;
public static int Example_Libretto_Left = 0;
public static int Example_Libretto_Width = 0;
public static int Example_Libretto_Height = 0;
public static bool Example_Libretto_AdhereTo = false; //輔助窗體是否與主窗體磁性在一起
//窗體之間的距離差
public static int Example_List_space_Top = 0;
public static int Example_List_space_Left = 0;
public static int Example_Libretto_space_Top = 0;
public static int Example_Libretto_space_Left = 0;
#endregion
#region 檢測各窗體是否連接在一起
/// <summary>
/// 檢測各窗體是否連接在一起
/// </summary>
public void FrmBackCheck()
{
bool Tem_Magnetism = false;
//Frm_ListBos與主窗體
Tem_Magnetism = false;
if ((Example_Play_Top - Example_List_Top) == 0)
Tem_Magnetism = true;
if ((Example_Play_Left - Example_List_Left) == 0)
Tem_Magnetism = true;
if ((Example_Play_Left - Example_List_Left - Example_List_Width) == 0)
Tem_Magnetism = true;
if ((Example_Play_Left - Example_List_Left + Example_List_Width) == 0)
Tem_Magnetism = true;
if ((Example_Play_Top - Example_List_Top - Example_List_Height) == 0)
Tem_Magnetism = true;
if ((Example_Play_Top - Example_List_Top + Example_List_Height) == 0)
Tem_Magnetism = true;
if (Tem_Magnetism)
Example_List_AdhereTo = true;
//Frm_Libretto與主窗體
Tem_Magnetism = false;
if ((Example_Play_Top - Example_Libretto_Top) == 0)
Tem_Magnetism = true;
if ((Example_Play_Left - Example_Libretto_Left) == 0)
Tem_Magnetism = true;
if ((Example_Play_Left - Example_Libretto_Left - Example_Libretto_Width) == 0)
Tem_Magnetism = true;
if ((Example_Play_Left - Example_Libretto_Left + Example_Libretto_Width) == 0)
Tem_Magnetism = true;
if ((Example_Play_Top - Example_Libretto_Top - Example_Libretto_Height) == 0)
Tem_Magnetism = true;
if ((Example_Play_Top - Example_Libretto_Top + Example_Libretto_Height) == 0)
Tem_Magnetism = true;
if (Tem_Magnetism)
Example_Libretto_AdhereTo = true;
//兩個輔窗體
Tem_Magnetism = false;
if ((Example_List_Top - Example_Libretto_Top) == 0)
Tem_Magnetism = true;
if ((Example_List_Left - Example_Libretto_Left) == 0)
Tem_Magnetism = true;
if ((Example_List_Left - Example_Libretto_Left - Example_Libretto_Width) == 0)
Tem_Magnetism = true;
if ((Example_List_Left - Example_Libretto_Left + Example_Libretto_Width) == 0)
Tem_Magnetism = true;
if ((Example_List_Top - Example_Libretto_Top - Example_Libretto_Height) == 0)
Tem_Magnetism = true;
if ((Example_List_Top - Example_Libretto_Top + Example_Libretto_Height) == 0)
Tem_Magnetism = true;
if (Tem_Magnetism)
Example_Assistant_AdhereTo = true;
}
#endregion
#region 利用窗體上的控件移動窗體
/// <summary>
/// 利用控件移動窗體
/// </summary>
/// <param Frm="Form">窗體</param>
/// <param e="MouseEventArgs">控件的移動事件</param>
public void FrmMove(Form Frm, MouseEventArgs e) //Form或MouseEventArgs添加命名空間using System.Windows.Forms;
{
if (e.Button == MouseButtons.Left)
{
Point myPosittion = Control.MousePosition; //獲取當前鼠標的屏幕坐標
myPosittion.Offset(CPoint.X, CPoint.Y); //重載當前鼠標的位置
Frm.DesktopLocation = myPosittion; //設置當前窗體在屏幕上的位置
}
}
#endregion
#region 計算窗體之間的距離差
/// <summary>
/// 計算窗體之間的距離差
/// </summary>
/// <param Frm="Form">窗體</param>
/// <param Follow="Form">跟隨窗體</param>
public void FrmDistanceJob(Form Frm, Form Follow)
{
switch (Follow.Name)
{
case "Frm_ListBox":
{
Example_List_space_Top = Follow.Top - Frm.Top;
Example_List_space_Left = Follow.Left - Frm.Left;
break;
}
case "Frm_Libretto":
{
Example_Libretto_space_Top = Follow.Top - Frm.Top;
Example_Libretto_space_Left = Follow.Left - Frm.Left;
break;
}
}
}
#endregion
#region 磁性窗體的移動
/// <summary>
/// 磁性窗體的移動
/// </summary>
/// <param Frm="Form">窗體</param>
/// <param e="MouseEventArgs">控件的移動事件</param>
/// <param Follow="Form">跟隨窗體</param>
public void
ManyFrmMove(Form Frm, MouseEventArgs e, Form Follow) //Form或MouseEventArgs添加命名空間using System.Windows.Forms;
{
if (e.Button == MouseButtons.Left)
{
int Tem_Left = 0;
int Tem_Top = 0;
Point myPosittion = Control.MousePosition; //獲取當前鼠標的屏幕坐標
switch (Follow.Name)
{
case "Frm_ListBox":
{
Tem_Top = Example_List_space_Top - FrmPoint.Y;
Tem_Left = Example_List_space_Left - FrmPoint.X;
break;
}
case "Frm_Libretto":
{
Tem_Top = Example_Libretto_space_Top - FrmPoint.Y;
Tem_Left = Example_Libretto_space_Left - FrmPoint.X;
break;
}
}
myPosittion.Offset(Tem_Left, Tem_Top);
Follow.DesktopLocation = myPosittion;
}
}
#endregion
#region 對窗體的位置進行初始化
/// <summary>
/// 對窗體的位置進行初始化
/// </summary>
/// <param Frm="Form">窗體</param>
public void FrmInitialize(Form Frm)
{
switch (Frm.Name)
{
case "Frm_Play":
{
Example_Play_Top = Frm.Top;
Example_Play_Left = Frm.Left;
Example_Play_Width = Frm.Width;
Example_Play_Height = Frm.Height;
break;
}
case "Frm_ListBox":
{
Example_List_Top = Frm.Top;
Example_List_Left = Frm.Left;
Example_List_Width = Frm.Width;
Example_List_Height = Frm.Height;
break;
}
case "Frm_Libretto":
{
Example_Libretto_Top = Frm.Top;
Example_Libretto_Left = Frm.Left;
Example_Libretto_Width = Frm.Width;
Example_Libretto_Height = Frm.Height;
break;
}
}
}
#endregion
#region 存儲各窗體的當前信息
/// <summary>
/// 存儲各窗體的當前信息
/// </summary>
/// <param Frm="Form">窗體</param>
/// <param e="MouseEventArgs">控件的移動事件</param>
public void FrmPlace(Form Frm)
{
FrmInitialize(Frm);
FrmMagnetism(Frm);
}
#endregion
#region 窗體的磁性設置
/// <summary>
/// 窗體的磁性設置
/// </summary>
/// <param Frm="Form">窗體</param>
public void FrmMagnetism(Form Frm)
{
if (Frm.Name != "Frm_Play")
{
FrmMagnetismCount(Frm, Example_Play_Top, Example_Play_Left, Example_Play_Width, Example_Play_Height,
"Frm_Play");
}
if (Frm.Name != "Frm_ListBos")
{
FrmMagnetismCount(Frm, Example_List_Top, Example_List_Left, Example_List_Width, Example_List_Height,
"Frm_ListBos");
}
if (Frm.Name != "Frm_Libratto")
{
FrmMagnetismCount(Frm, Example_Libretto_Top, Example_Libretto_Left, Example_Libretto_Width,
Example_Libretto_Height, "Frm_Libratto");
}
FrmInitialize(Frm);
}
#endregion
#region 磁性窗體的計算
/// <summary>
/// 磁性窗體的計算
/// </summary>
/// <param Frm="Form">窗體</param>
/// <param e="MouseEventArgs">控件的移動事件</param>
public void FrmMagnetismCount(Form Frm, int top, int left, int width, int height, string Mforms)
{
bool Tem_Magnetism = false; //判斷是否有磁性發生
string Tem_MainForm = ""; //臨時記錄主窗體
string Tem_AssistForm = ""; //臨時記錄輔窗體
//上面進行磁性窗體
if ((Frm.Top + Frm.Height - top) <= Example_FSpace && (Frm.Top + Frm.Height - top) >= -Example_FSpace)
{
//當一個主窗體不包含輔窗體時
if ((Frm.Left >= left && Frm.Left <= (left + width)) ||
((Frm.Left + Frm.Width) >= left && (Frm.Left + Frm.Width) <= (left + width)))
{
Frm.Top = top - Frm.Height;
if ((Frm.Left - left) <= Example_FSpace && (Frm.Left - left) >= -Example_FSpace)
Frm.Left = left;
Tem_Magnetism = true;
}
//當一個主窗體包含輔窗體時
if (Frm.Left <= left && (Frm.Left + Frm.Width) >= (left + width))
{
Frm.Top = top - Frm.Height;
if ((Frm.Left - left) <= Example_FSpace && (Frm.Left - left) >= -Example_FSpace)
Frm.Left = left;
Tem_Magnetism = true;
}
}
//下面進行磁性窗體
if ((Frm.Top - (top + height)) <= Example_FSpace && (Frm.Top - (top + height)) >= -Example_FSpace)
{
//當一個主窗體不包含輔窗體時
if ((Frm.Left >= left && Frm.Left <= (left + width)) ||
((Frm.Left + Frm.Width) >= left && (Frm.Left + Frm.Width) <= (left + width)))
{
Frm.Top = top + height;
if ((Frm.Left - left) <= Example_FSpace && (Frm.Left - left) >= -Example_FSpace)
Frm.Left = left;
Tem_Magnetism = true;
}
//當一個主窗體包含輔窗體時
if (Frm.Left <= left && (Frm.Left + Frm.Width) >= (left + width))
{
Frm.Top = top + height;
if ((Frm.Left - left) <= Example_FSpace && (Frm.Left - left) >= -Example_FSpace)
Frm.Left = left;
Tem_Magnetism = true;
}
}
//左面進行磁性窗體
if ((Frm.Left + Frm.Width - left) <= Example_FSpace && (Frm.Left + Frm.Width - left) >= -Example_FSpace)
{
//當一個主窗體不包含輔窗體時
if ((Frm.Top > top && Frm.Top <= (top + height)) ||
((Frm.Top + Frm.Height) >= top && (Frm.Top + Frm.Height) <= (top + height)))
{
Frm.Left = left - Frm.Width;
if ((Frm.Top - top) <= Example_FSpace && (Frm.Top - top) >= -Example_FSpace)
Frm.Top = top;
Tem_Magnetism = true;
}
//當一個主窗體包含輔窗體時
if (Frm.Top <= top && (Frm.Top + Frm.Height) >= (top + height))
{
Frm.Left = left - Frm.Width;
if ((Frm.Top - top) <= Example_FSpace && (Frm.Top - top) >= -Example_FSpace)
Frm.Top = top;
Tem_Magnetism = true;
}
}
//右面進行磁性窗體
if ((Frm.Left - (left + width)) <= Example_FSpace && (Frm.Left - (left + width)) >= -Example_FSpace)
{
//當一個主窗體不包含輔窗體時
if ((Frm.Top > top && Frm.Top <= (top + height)) ||
((Frm.Top + Frm.Height) >= top && (Frm.Top + Frm.Height) <= (top + height)))
{
Frm.Left = left + width;
if ((Frm.Top - top) <= Example_FSpace && (Frm.Top - top) >= -Example_FSpace)
Frm.Top = top;
Tem_Magnetism = true;
}
//當一個主窗體包含輔窗體時
if (Frm.Top <= top && (Frm.Top + Frm.Height) >= (top + height))
{
Frm.Left = left + width;
if ((Frm.Top - top) <= Example_FSpace && (Frm.Top - top) >= -Example_FSpace)
Frm.Top = top;
Tem_Magnetism = true;
}
}
if (Frm.Name == "Frm_Play")
Tem_MainForm = "Frm_Play";
else
Tem_AssistForm = Frm.Name;
if (Mforms == "Frm_Play")
Tem_MainForm = "Frm_Play";
else
Tem_AssistForm = Mforms;
if (Tem_MainForm == "")
{
Example_Assistant_AdhereTo = Tem_Magnetism;
}
else
{
switch (Tem_AssistForm)
{
case "Frm_ListBos":
Example_List_AdhereTo = Tem_Magnetism;
break;
case "Frm_Libratto":
Example_Libretto_AdhereTo = Tem_Magnetism;
break;
}
}
}
#endregion
#region 恢復窗體的初始大小
/// <summary>
/// 恢復窗體的初始大小(當松開鼠標時,如果窗體的大小小于300*200,恢復初始狀態)
/// </summary>
/// <param Frm="Form">窗體</param>
public void FrmScreen_FormerlySize(Form Frm, int PWidth, int PHeight)
{
if (Frm.Width < PWidth || Frm.Height < PHeight)
{
Frm.Width = PWidth;
Frm.Height = PHeight;
//Example_Size = false;
}
}
#endregion
}
static class Program
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Frm_Play());
}
}
原文鏈接:https://zhima.blog.csdn.net/article/details/128020694
- 上一篇:C#實現自定義屏保的示例代碼_C#教程
- 下一篇:詳解C#如何實現窗體換膚_C#教程
相關推薦
- 2022-04-02 C#實現NPOI的Excel導出詳解_C#教程
- 2022-05-22 Nginx設置HTTPS的方法步驟_nginx
- 2023-03-11 Golang的Fork/Join實現代碼_Golang
- 2022-12-05 關于Word2Vec可視化展示_python
- 2022-04-09 SpringBoot默認日志框架(slf4j)的使用以及配置文件
- 2022-10-11 Android自動縮放上下限折線圖示例_Android
- 2022-05-28 python按列索引提取文件夾內所有excel指定列匯總(示例代碼)_python
- 2023-03-15 手把手教你用Python中的Linting提高代碼質量_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支