对于第一个问题,设置一个标志位
为控件加入鼠标按下事件
修改标志位
鼠标移动事件(判断标志位)
鼠标弹开事件
再次修改标志位private System.Windows.Forms.Label label1;
Point pLabel1Down = new Point(); //记录鼠标点击时的点坐标
bool bIfMove = false;
private void label1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
pLabel1Down.X = e.X;
pLabel1Down.Y = e.Y;
bIfMove = true;
}
private void label1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(bIfMove == true)
{
this.label1.Location = new Point(e.X+label1.Left-pLabel1Down.X,e.Y+label1.Top-pLabel1Down.Y);
}
}
private void label1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(bIfMove == true)
{
this.label1.Location = new Point(e.X+label1.Left-pLabel1Down.X,e.Y+label1.Top-pLabel1Down.Y);
bIfMove = false;
}
}

解决方案 »

  1.   

    MouseEnter事件只能判断鼠标进行控件的那一刻,
    那怎么判断在这一刻用户按下了左键?
    也就是怎么区分MouseEnter和MouseMove呢?
      

  2.   

    我试了一下,MouseEnter和MouseMove中间可能就只差一个像素而已.
    也就是说,
    MouseEnter就是在鼠标经过边界的那个像素上时起作用,这个时候我即使设了让鼠标的形状改变,也根本不起作用啊...
      

  3.   


    MouseEnter里:if (e.Button == MouseButtons.Left)  //按下左键
      

  4.   


    用户移动控件:
    先定义两个窗体级变量 X,Y   (int型)
    通过移动lblNewNotice来移动panel.
    也可自已移动自已。private void lblNewNotice_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    {                                          //用于移动控件时
             X = e.X;
    Y = e.Y;
    }private void lblNewNotice_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if (e.Button == MouseButtons.Left)
    {
    this.panel.Top = this.panel.Top +( e.Y -Y);
    this.panel.Left = this.panel.Left + (e.X -X);
    }

    }
      

  5.   

    MouseEnter,在这个事件里写代码啊.......
      

  6.   

    MouseEnter事件里的e没有button这个属性啊
    怎么使用 if (e.Button == MouseButtons.Left)  //按下左键  啊在MouseEnter事件里怎么写啊