如何制作类似触摸屏的主窗体 C#

how to make touchscreen-like mainform C#

我想让我的主窗体像智能手机触摸屏一样可拖动。

所以我在其中放置了一个 bunifugradientpanel 并将其停靠在 mainform 中。还放了一个 bunifudragcontrol 并设置了 targetcontrol 属性 = 'bunifugradientpanel' 和 vertical 属性 to 'false' also fixed 属性 to 'false'.但是,每当我在 rumtime 中将面板向右拖动时,主窗体的部分就会显示出来,也就是图片中的白色部分。

屏幕的白色部分是主窗体。我想要的是停止拖动 activity 如果主窗体上的 bunifugradientpanel 位置 = (x=0,y=0) 所以主窗体的部分不会出现。感谢你们的帮助。

BunifuGradientPanel 是第三方控件,这就是为什么它会出现绘图和闪烁问题,我的建议是您使用常见的 Panel System.Windows.Forms.Panel

也就是说,我为您创建了这段代码,使控件在按下鼠标按钮时只能从右向左和从左向右拖动:

using System;
using System.Windows.Forms;

namespace JeremyHelp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.SetStyle(
            ControlStyles.AllPaintingInWmPaint |
            ControlStyles.UserPaint |
            ControlStyles.DoubleBuffer,
            true);
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            this.SetDraggable(this.bunifuGradientPanel1, vertical: false);
        }

        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams handleParam = base.CreateParams;
                handleParam.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED       
                return handleParam;
            }
        }

        private void SetDraggable(Control target, bool horizontal = true, bool vertical = true)
        {
            bool IsDraggable = false;
            int
            X = 0, Y = 0,
            A = 0, B = 0;

            target.MouseUp += (s, e) =>
            {
                IsDraggable = false;
                X = 0; Y = 0;
                A = 0; B = 0;
            };

            target.MouseDown += (s, e) =>
            {
                IsDraggable = true;
                A = Control.MousePosition.X - target.Left;
                B = Control.MousePosition.Y - target.Top;
            };

            target.MouseMove += (s, e) =>
            {
                X = Control.MousePosition.X;
                Y = Control.MousePosition.Y;

                if (IsDraggable)
                {
                    if (horizontal) target.Left = X - A;
                    if (vertical) target.Top = Y - B;
                }
            };
        }
    }
}