我制作了一个TextBox,用于保留您键入的内容,当您点击相关按钮时,它会为您提供一个消息框。当人们想要点击“否”时,我希望按钮改变位置,这样人们就不能点击它,所以他们被迫点击“是”,问题是鼠标悬停工作只有一次,并且在我离开指针后不会回到初始位置。你能帮助我吗?这是代码:
{
MsgBox = new CustomMsgBox();
MsgBox.label1.Text = Text;
MsgBox.button1.Text = btnOK;
MsgBox.button2.Text = btnCancel;
MsgBox.Text = Caption;
result = DialogResult.No;
MsgBox.ShowDialog();
return result;
}
private void button2_Click(object sender, EventArgs e)
{
button2.Location = new Point(25, 25);
}
private void button2_MouseHover(object sender, EventArgs e)
{
button2.Location = new Point(+50, +50);
}
private void button2_MouseLeave(object sender, EventArgs e)
{
button2.Location = new Point(+100, +100);
}
答案 0 :(得分:1)
您不应该使用MouseLeave,因为当您在MouseHover中移动按钮时,按钮将移动,鼠标将离开按钮区域。这意味着No按钮将从原始位置翻转到新位置并一直返回。您可以做的是使用MouseMove查看用户是否离开Button2最初的区域,然后将其移回。或者包含一个不可见的控件,如button2后面的空标签。然后在标签上设置MouseLeave。
哦,别忘了设置button2.TabStop = false,否则用户可以使用tab来到按钮。
为此做了一个快速而肮脏的概念证明,希望有所帮助;)
public partial class Form1 : Form
{
private Rectangle buttonRectangle;
private bool checkRectangle = false;
public Form1()
{
InitializeComponent();
button2.TabStop = false;
buttonRectangle = button2.ClientRectangle;
buttonRectangle.Location = button2.Location;
}
private void button2_Click(object sender, EventArgs e)
{
button2.Location = new Point(25, 25);
}
private void button2_MouseHover(object sender, EventArgs e)
{
button2.Location = new Point(50, 50);
checkRectangle = true;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (!checkRectangle)
{
return;
}
if (!buttonRectangle.Contains(e.X, e.Y))
{
checkRectangle = false;
button2.Location = buttonRectangle.Location;
}
}
}
buttonRectangle是根据构建表单时找到按钮的位置设置的。它有一个contains方法,可用于检查是否包含某个点(鼠标移动)。
我还将button2.TabStop设置为false,以便在制表符循环期间不再处于活动状态。
当您的悬停(可以将其更改为鼠标输入,但只是使用您的代码)事件触发时,我将checkRectangle设置为true。我在鼠标移动事件处理程序中使用它来查看是否应该检查任何内容(当鼠标没有“超过”按钮时阻止做任何事情)。
如果buttonRectangle和鼠标位置没有相交,这意味着我们离开了按钮所在的区域,因此我们可以将按钮移回。