2015-05-31 82 views
2

我使用下面的代码在运行时创建按钮,但如何让他们移动(拖能够与鼠标在屏幕上的任何地方)如何创建活动(鼠标)在运行时键c#

var b = new Button(); 
    b.Text = "My Button"; 
    b.Name= "button"; 
    b.Click += new EventHandler(b_Click); 
    b.MouseUp += new MouseEventHandler(this.b_MouseUp); 
    b.MouseDown += new MouseEventHandler(this.b_MouseDown); 
    b.MouseMove += new MouseEventHandler(this.b_MouseMove); 
    this.myPanel.Controls.Add(b); 

我试图使用鼠标事件,但无法使它们根据鼠标指针移动

回答

0

由于鼠标在拖动时可以在按钮外移动,因此必须使用Control.Capture属性。
这个例子让我们移动按钮不是在整个屏幕上,而是在其父容器的边界内(或者在其外部,然后隐藏,这应该可以被阻止)。

private Point Origin_Cursor; 
private Point Origin_Control; 
private bool BtnDragging = false; 

private void button1_Click(object sender, EventArgs e) 
{ 
    var b = new Button(); 
    b.Text = "My Button"; 
    b.Name = "button"; 
    //b.Click += new EventHandler(b_Click); 
    b.MouseUp += (s, e2) => { this.BtnDragging = false; }; 
    b.MouseDown += new MouseEventHandler(this.b_MouseDown); 
    b.MouseMove += new MouseEventHandler(this.b_MouseMove); 
    this.panel1.Controls.Add(b); 
} 

private void b_MouseDown(object sender, MouseEventArgs e) 
{ 
    Button ct = sender as Button; 
    ct.Capture = true; 
    this.Origin_Cursor = System.Windows.Forms.Cursor.Position; 
    this.Origin_Control = ct.Location; 
    this.BtnDragging = true; 
} 

private void b_MouseMove(object sender, MouseEventArgs e) 
{ 
    if(this.BtnDragging) 
    { 
     Button ct = sender as Button; 
     ct.Left = this.Origin_Control.X - (this.Origin_Cursor.X - Cursor.Position.X); 
     ct.Top = this.Origin_Control.Y - (this.Origin_Cursor.Y - Cursor.Position.Y); 
    } 
} 
+0

谢谢为我工作 – phpnet

+0

PLZ也回答这个问题http://stackoverflow.com/q/30563736/4958817 – phpnet

相关问题