• vc#.net使用入门2(移动无标题窗体)


    (以下待修改)
        在没有使用vc#的时候觉得,移动无标题窗体不是很难的,在真正操作时候,发现了许多问题,它毕竟没有flash中startdrag与stopdrag方法,我把我的解决过程写下来,当然对于熟练使用vc#的人来说我写的东西简直是垃圾。
        我一开始这样考虑:1、MouseDown的时候,记录当前鼠标在窗体的位置,firstpoint,设置逻辑变量a,可以移动了。2、MouseMove的时候,再获取当前鼠标的位置,减去firstpoint,获得位置变化的量▽pos,窗体的位置加上这个变化的量。3、MouseUp的时候,改变变量a,不可以移动。
        代码如下:
        待加(代码在笔记本中,没时间打开了)
        运行的结果:拖动窗体可以实现了,但是“抖”得厉害,也就是说鼠标没有放开时,窗体的位置一直在变化,拉动鼠标的幅度越大,越抖得厉害,加了一个toolTip,发现鼠标位置在变化。
        分析原因:当鼠标移动过快,移出窗体,获得的e.Location就不准确了。others……
        解决办法:waitting……
        花了半天的时候重新写的代码:(复制以下代码可以测试,注意位置)
    private Point m_pOffset; //鼠标偏移
            private int xPos, yPos; //鼠标位置
            private Point LocationMain = new Point(0, 0); //主窗口位置
            public Form1()
            {
                InitializeComponent();
            }
           //添加鼠标事件处理方法
            private void Form1_Load(object sender, EventArgs e)
            {
                this.MouseDown += new MouseEventHandler(Form1_MouseDown);
                this.MouseMove += new MouseEventHandler(Form1_MouseMove);

            }
            //响应鼠标移动,并移动窗口
            private void Form1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    Point mousePos = Control.MousePosition;
                    mousePos.Offset(m_pOffset.X, m_pOffset.Y);
                    Location = mousePos;
                    xPos = mousePos.X;
                    yPos = mousePos.Y;
                    if (xPos < 0)
                        xPos = 0;
                    if (yPos < 0)
                        yPos = 0;
                    this.LocationMain.X = xPos;
                    this.LocationMain.Y = yPos;
                }
            }
            //记录鼠标位置
            private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                m_pOffset = new Point(-e.X, -e.Y);
            }
        暂告一段落。
    //下篇,用户状态的物理存储(ini等文件的读写)

  • 相关阅读:
    Angular 学习笔记(四)
    Angular 学习笔记(三)
    Angular 学习笔记(二)
    Angular 学习笔记(一)
    ettercap + driftnet 实现同网段下流量欺骗
    kali 下使用 arpspoof 实现断网攻击
    JavaScript 语句
    vscode配置git及码云
    区块链入门
    C#情怀与未来
  • 原文地址:https://www.cnblogs.com/numen/p/348702.html
Copyright © 2020-2023  润新知