C#-ボーダーレスウィンドウは、ドラッグ、最大化、最小化、および閉じるを実現します

       フォームがフチなしモードに設定されている場合(設定方法:FormBorderStyle = None)、デフォルトでは自由にドラッグすることはできず、最大化、最小化、閉じるなどのボタンはありません。

1)境界線を削除するウィンドウを選択し、F4キーを押してウィンドウのプロパティを呼び出します。

2)プロパティボックスでFormBorderStyleを見つけ、[なし]を選択します。

1つは、フォームドラッグを実現する

方法1:APIを呼び出す

using System.Runtime.InteropServices;
 
    [DllImport("user32.dll")]
    public static extern bool ReleaseCapture();
    [DllImport("user32.dll")]
    public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
    public const int WM_SYSCOMMAND = 0x0112;
    public const int SC_MOVE = 0xF010;
    public const int HTCAPTION = 0x0002; 

    //添加窗体的MouseDown事件,并编写如下代码
    private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {
      ReleaseCapture();
      SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
    }

方法2:フォームMouseDown、MouseMove、MouseUpイベントを通じてフォームの動きを実現する

        Point mouseOff;//鼠标移动位置变量
        bool leftFlag;//标签是否为左键

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                mouseOff = new Point(-e.X, -e.Y); //得到变量的值
                leftFlag = true;                  //点击左键按下时标注为true;
            }
        }
 
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (leftFlag)
            {
                Point mouseSet = Control.MousePosition;
                mouseSet.Offset(mouseOff.X, mouseOff.Y);  //设置移动后的位置
                Location = mouseSet;
            }
        }
 
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            if (leftFlag)
            {
                leftFlag = false;//释放鼠标后标注为false;
            }
        }

方法3:パネルのMouseDownイベントとMouseMoveイベントを介してフォームを移動します

        private Point mPoint;

        /// <summary>
        /// 鼠标按下
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void panel1_MouseDown(object sender, MouseEventArgs e)
        {
            mPoint = new Point(e.X, e.Y);
        }

        /// <summary>
        /// 鼠标移动
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void panel1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.Location = new Point(this.Location.X + e.X - mPoint.X, this.Location.Y + e.Y - mPoint.Y);
            }
        }

総括する:

    (1)フォームのドラッグを実現するには、通常、フォームのヘッドをクリックしてフォームを移動します。したがって、フォームヘッドの最上層がコントロールである場合は、コントロールのMouseDown、MouseMove、MouseUpイベントを記述します。

    (2)上記の3つの方法のうち、2番目の方法は3番目の方法と同じ効果があります。2番目と3番目の方法がドラッグしている間、最初の方法はウィンドウをドラッグするときにオーバーラップしないことに注意してください。オーバーラップがあります。移動時の窓;

     単純なボーダレスウィンドウ移動のソースコード

2.最大化、最小化、および閉じる

     フォームにラベルまたはボタンを配置し、対応するクリックイベントを登録することで、イベントに関数が実装されます。

1.最大化

        //窗体最大化
        private void label1_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
        }

2、最小化

        //窗体最小化
        private void label2_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }

3.閉じる

        //关闭窗体
        private void label3_Click(object sender, EventArgs e)
        {
            this.Close();
        }

 

3つの同様のブログ

次のブロガーに感謝します:

1、https://blog.csdn.net/lpveneno/article/details/53507112

2、https://www.cnblogs.com/JiYF/p/9053596.html

おすすめ

転載: blog.csdn.net/zwb_578209160/article/details/104193476