C#-失控按钮

C#-失控按钮,c#,winforms,C#,Winforms,我需要你帮我完成以下程序。我需要制作一个失控按钮,该按钮应始终完全包含在表单中,并应尽可能靠近鼠标指针,而不允许单击 我的节目: public partial class Form1 : Form { int i = 0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) {

我需要你帮我完成以下程序。我需要制作一个失控按钮,该按钮应始终完全包含在表单中,并应尽可能靠近鼠标指针,而不允许单击

我的节目:

public partial class Form1 : Form
{
    int i = 0;
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        successLabel.Visible = true;
        button1.Enabled = false;
    }

    private void Form1_Click(object sender, EventArgs e)
    {
        if (successLabel.Visible == false) missedLabel.Visible = true;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        successLabel.Visible = missedLabel.Visible = false;
        timer1.Enabled = true;
        progressBar1.Value = progressBar1.Minimum;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Interval = 1000;
        if (progressBar1.Value == progressBar1.Maximum)
        {
            gameOverLabel.Visible = true;
            this.Enabled = false;
            timer1.Enabled = false;
            Form1_MouseClick(sender, e);
        }
        else
        {
            gameOverLabel.Visible = false;
            progressBar1.PerformStep();
        }
    }

    private void Form1_MouseClick(object sender, EventArgs e)
    {
        i++;
        gameOverLabel.Text = "Game over, you failed! " + Environment.NewLine + "Clicks: " + i.ToString();
    }

    private void button1_MouseEnter(object sender, EventArgs e)
    {
        missedLabel.Visible = false;
        int x, y;
        Point formClientSize = new Point(ClientSize);

        Random rnd = new Random();
        do
        {
            x = rnd.Next(0, formClientSize.X - button1.Width);
        }
        while (x >= button1.Left - button1.Width && x <= button1.Right);
        do
        {
            y = rnd.Next(0, formClientSize.Y - button1.Height);
        }
        while (y >= button1.Top - button1.Height && y <= button1.Bottom);
        button1.Location = new Point(x, y);
    }
}
公共部分类表单1:表单
{
int i=0;
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
successLabel.Visible=true;
按钮1.启用=错误;
}
私有void Form1\u单击(对象发送方,事件参数e)
{
if(successLabel.Visible==false)missedLabel.Visible=true;
}
私有void Form1\u加载(对象发送方、事件参数e)
{
successLabel.Visible=missedLabel.Visible=false;
timer1.Enabled=true;
progressBar1.值=progressBar1.最小值;
}
私有无效计时器1_刻度(对象发送方,事件参数e)
{
计时器1。间隔=1000;
如果(progressBar1.Value==progressBar1.Maximum)
{
gameOverLabel.Visible=true;
此.Enabled=false;
timer1.Enabled=false;
Form1_鼠标单击(发送方,e);
}
其他的
{
gameOverLabel.Visible=false;
progressBar1.PerformStep();
}
}
私有void Form1\u鼠标单击(对象发送方,事件参数e)
{
i++;
gameOverLabel.Text=“游戏结束,您失败了!”+Environment.NewLine+“单击:”+i.ToString();
}
私有无效按钮1\u鼠标指针(对象发送方,事件参数e)
{
missedLabel.Visible=false;
int x,y;
Point formClientSize=新点(ClientSize);
随机rnd=新随机();
做
{
x=rnd.Next(0,formClientSize.x-按钮1.宽度);
}

虽然(x>=button1.Left-button1.Width&&x=button1.Top-button1.Height&&y现有代码生成一组随机坐标,并继续这样做,直到这些坐标确保新按钮位置不包含当前指针位置。但您不需要随机位置;您需要一个靠近当前指针位置的位置耳鼻喉管指针

一起移除随机数生成器。相反,请更改按钮1\u MouseEnter方法,将按钮向上移动到按钮的高度,向左移动到按钮的宽度。这样做直到碰到边缘,然后翻转一点,并根据碰到的窗口边缘将其向下/向右移动

这将使用鼠标指针跟踪按钮。如果要使其紧密跟踪,则需要添加一些逻辑,以检测鼠标在按钮上的输入位置。如果从顶部输入,则向下移动几个像素。如果从左侧输入,则向右移动。等等。如果击中窗口边缘,则为其移动添加额外的方向


由于这是一项学校作业,我将把把逻辑转换成代码作为提问者的练习。

这听起来像是一个奇怪的要求。你是在做一个笑话应用程序还是什么?这是一个非常奇怪的问题,这是一个喝醉的老师xD的家庭作业吗?看看鼠标移动事件,并相应地移动你的按钮。怎么做o我相应地移动按钮?XD如果您锚定在
鼠标移动
上,您只需执行以下操作即可获取坐标:
e.X
e.Y
。因此,您应该能够始终根据需要更改按钮在窗体上的位置。