2

我有一个小程序,其中包含一个名为的按钮button1和一个名为的面板panel1,其颜色为绿色。到目前为止,该程序允许您button1在表单中拖动。我正在尝试扩展此程序,因此当button1将其放在面板上时,面板将颜色变为红色。

表格:

在此处输入图像描述

到目前为止的代码:

System.Drawing.Point OldPosition; 

public Form1()
{
    InitializeComponent();
}

private void button1_MouseDown(object sender, MouseEventArgs e)
{
    //Only prepare if the button click down is the left button  
    if (e.Button == MouseButtons.Left)
    {
        //Store the current mouse location  
        OldPosition = e.Location;
        //Change the mouse cursor if you want  
        button1.Cursor = Cursors.Hand;
    }  
}

private void button1_MouseMove(object sender, MouseEventArgs e)
{
    //Only move if the left button still down  
    if (e.Button == MouseButtons.Left)
    {
        button1.Location = new Point(button1.Location.X + (e.X - OldPosition.X), button1.Location.Y + (e.Y - OldPosition.Y));
    } 
}

private void Form1_Load(object sender, EventArgs e)
{
    panel1.BackColor = Color.Green;        
}

private void panel1_MouseEnter(object sender, EventArgs e)
{
    if (button1.Location == panel1.Location)
        panel1.BackColor = Color.Red; //im not sure how to do this part
}
4

1 回答 1

2

试试下面的代码:

private void button1_MouseMove(object sender, MouseEventArgs e)
{
    //Only move if the left button still down  
    if (e.Button == MouseButtons.Left)
    {
        button1.Location = new Point(button1.Location.X + (e.X - OldPosition.X), button1.Location.Y + (e.Y - OldPosition.Y));

        //CHECK IF NEW LOCATION IS WITHIN PANEL BOUNDS
        if (panel1.Bounds.Contains(button1.Location))
           panel1.BackColor = Color.Red;
        else
           panel1.BackColor = Color.Green;
    }
}

同样在设计器中,您可能需要“发送回”panel1控件,否则如果按钮越过面板,按钮将不可见。

于 2012-11-08T18:49:05.183 回答