我正在尝试为餐厅制作餐桌系统,但事情变得越来越困难。我想要做的是一个按钮,当单击它时会创建新按钮(在运行时/动态 - 或新的餐厅桌子),然后能够移动这些相同的按钮(桌子)并将它们放置在主窗体中。
我的主要形式有这 4 个变量:
int posMouseFormX, posMouseFormY, posMouseBotonX, posMouseBotonY,
posActBotonX, posActBotonY
当我启动表单时,我有这段代码为我创建了按钮:
private void crearNuevaMesa()
{
for (int i = 0; i < 10; i++)
{
Button btn = new Button();
btn.Name = "btn" + i;
btn.Height = 40;
btn.Width = 300;
btn.BackColor = Color.Red;
btn.Location = new Point(200, 200);
btn.Text = "SOY UNA NUEVA MESA";
btn.Font = new Font("Georgia", 16);
btn.MouseMove += new MouseEventHandler(btn_MouseMove);
Controls.Add(btn);
}
}
然后我调用这个其他方法来设置坐标:
private void btn_MouseMove(object sender, EventArgs e)
{
posMouseFormX = posActBotonX + e.Location.X;
posMouseFormY = posActBotonY + e.Location.Y;
if (botonPresionado == true)
{
moverBoton();
}
}
但它让我在 btn_MouseMove 方法的 e.Location.X 中崩溃了,我不知道为什么!!!!谁来帮帮我 ??
Gerardo 是对的,事件处理程序签名
MouseMove
需要一个MouseEventArgs
确实具有Location
. 但是你还有其他问题。e.Location
在MouseMove
按钮事件中,它将返回相对于按钮的鼠标位置。这显然不允许您按预期移动它。我为您提供了一个简单的解决方案,即当您单击按钮并且不释放鼠标按钮时移动按钮。首先,我添加一个变量来存储在表单上单击的按钮:
然后我们在按钮的创建中添加必要的事件:
如您所见,我添加了事件
MouseDown
和MouseUp
. 现在这些将是处理程序:正如你所看到的,当一个按钮被按下时,它的名字存储在控制哪个按钮移动的变量中,当它被释放时,该变量被删除。然后,
MouseMove
使用光标的位置PointToClient
来获得相对于表单的所述位置,如果按钮是我们正在移动的按钮,我们将其位置放在光标的位置。很好,
我认为您在实现 btn_MouseMove方法时遇到了问题,因为您将e 参数定义为EventArgs并且您应该将其声明为MouseEventArgs,否则它无法识别Location属性。
我给你留下更正的方法:
您好,希望对您有所帮助。