回答
我假设你正在使用WinForms。
问题是您的图片实际上显示的不是矩形按钮。这是另一个难点,但我想限制它到你的问题。因此,你需要能够做一些事情。
- 获取鼠标位置
- 优惠时3秒没有鼠标运动传递
- 动态创建按钮
- 设置按钮的位置被调用的方法。
让我们一步做到这一步:
1.获取鼠标位置
因此你必须处理MouseMove
事件。因此,您选择您的表格,进入属性(按F4),选择事件选项卡(闪电图标),然后双击MouseMove右侧的字段。这将在您的代码中创建Form1_MouseMove
方法。在此方法中,您可以使用e.Location;
获取鼠标位置。
我们的方法到这里看起来像这样:
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
var location = e.Location;
}
2.开始一个当3秒没有鼠标移动通过
所以我想用一个定时器被调用的方法。要做到这一点,你再次切换到设计器(按F7),打开工具箱(CTRL + ALT + X)并将定时器项目拖到您的表单中。选择新创建的计时器(它在您的表单下可见),再次切换到属性选项卡,选择属性(闪电箭头左侧的图标),双击右侧的字段启用将其设置为true,开关再次点击事件标签,然后双击的右侧字段。那里的方法将被调用每100毫秒。然后,您将添加一个名为_timePassedSinceLastMove的字段。每调用一次tick方法,你都会增加这个值,当调用Form1_MouseMove
时,将它再次设置为0。在timer1_Tick
方法中,您将检查_timePassedSinceLastMove字段已超过30,如果是,则将调用应每3秒调用一次的方法。其实我们还是要请检查是否您的鼠标位置真正从旧的不同,因为是WinForms的一点点在这种情况下,过度敏感。因此,我们添加一个字段与原来的位置,并将其与新的。您的类应该是这个样子,现在:
public partial class Form1 : Form
{
private Point _oldMousePosition;
public Form1()
{
InitializeComponent();
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
var location = e.Location;
if (_oldMousePosition == location)
return;
_oldMousePosition = location;
_timePassedSinceLastMove = 0;
}
private int _timePassedSinceLastMove;
private void timer1_Tick(object sender, EventArgs e)
{
_timePassedSinceLastMove++;
if (_timePassedSinceLastMove > 30)
{
MouseNotMove3Seconds();
_timePassedSinceLastMove = 0;
}
}
private void MouseNotMove3Seconds()
{
}
}
3.动态创建按钮
我会打电话给这个任务是最容易的。我认为这是对一个例子可以很好地解释说:
var button = new Button();
Controls.Add(button);
我们只需创建一个新的按钮,将它添加到我们的表单控件(这是在代码执行后面的为好)。如果我们要添加4个按钮,只要鼠标不动了,我们将简单地做这样的:
private void MouseNotMove3Seconds()
{
var button1 = new Button();
Controls.Add(button1);
var button2 = new Button();
Controls.Add(button2);
var button3 = new Button();
Controls.Add(button3);
var button4 = new Button();
Controls.Add(button4);
}
4.设置按钮
的位置设置一个按钮的位置是不是太困难或者:
var button1 = new Button();
button1.Location = new Point(0, 0);
我们可以写这个更漂亮以及与对象初始化:
var button1 = new Button {Location = new Point(0, 0)};
但现在我们不希望在位置0,0,但在我们的光标所有按钮。所以我们会做这样的事情(位置总是左上角的):
private void MouseNotMove3Seconds()
{
var button1 = new Button {Location = new Point(_oldMousePosition.X + Cursor.Size.Width, _oldMousePosition.Y)};
Controls.Add(button1);
var button2 = new Button {Location = new Point(_oldMousePosition.X - button1.Width/2, _oldMousePosition.Y + Cursor.Size.Height)}; //I cheated a little bit here, but as the buttons are all the same...
Controls.Add(button2);
var button3 = new Button {Location = new Point(_oldMousePosition.X - (int)(button1.Width * 1.5), _oldMousePosition.Y)};
Controls.Add(button3);
var button4 = new Button {Location = new Point(_oldMousePosition.X - button1.Width/2, _oldMousePosition.Y - (int)(button1.Height * 1.5))};
Controls.Add(button4);
}
现在你说你想要徘徊时,再次删除按钮。因此,我们需要创建一个方法ButtonHovered
:我们添加到窗体
private void ButtonHovered(object sender, EventArgs e)
{
Controls.Clear();
}
现在,我们只是删除所有的组件(按钮)。当然,如果你在你的形式更多的组件,你必须只删除组件的四个按钮,剩下的英寸
,此方法是现在所谓的,但因为我们没有处理按钮的悬停事件。因此,我们必须修改我们的MouseNotMoved3Seconds
方法一点点:
private void MouseNotMove3Seconds()
{
var button1 = new Button {Location = new Point(_oldMousePosition.X + Cursor.Size.Width, _oldMousePosition.Y)};
Controls.Add(button1);
var button2 = new Button {Location = new Point(_oldMousePosition.X - button1.Width/2, _oldMousePosition.Y + Cursor.Size.Height)}; //I cheated a little bit here, but as the buttons are all the same...
Controls.Add(button2);
var button3 = new Button {Location = new Point(_oldMousePosition.X - (int)(button1.Width * 1.5), _oldMousePosition.Y)};
Controls.Add(button3);
var button4 = new Button {Location = new Point(_oldMousePosition.X - button1.Width/2, _oldMousePosition.Y - (int)(button1.Height * 1.5))};
Controls.Add(button4);
button1.MouseHover += ButtonHovered;
button2.MouseHover += ButtonHovered;
button3.MouseHover += ButtonHovered;
button4.MouseHover += ButtonHovered;
}
现在我们必须连接到ButtonHovered法的事件,当用户将鼠标悬停在按钮中的一个将被调用。
如果您想知道哪个按钮导致按钮消失,导致事件触发的按钮将通过sender
属性给予ButtonHovered
方法。
在您的图片您的按钮也对他们的书面文字,让我们做到这一点为好。因此,我们将在MouseNotMove3Seconds
方法更改对象初始化按钮的Text
属性:
private void MouseNotMove3Seconds()
{
var button1 = new Button
{
Location = new Point(_oldMousePosition.X + Cursor.Size.Width, _oldMousePosition.Y),
Text = "B"
};
Controls.Add(button1);
var button2 = new Button
{
Location = new Point(_oldMousePosition.X - button1.Width/2, _oldMousePosition.Y + Cursor.Size.Height),//I cheated a little bit here, but as the buttons are all the same...
Text = "C"
};
Controls.Add(button2);
var button3 = new Button
{
Location = new Point(_oldMousePosition.X - (int)(button1.Width * 1.5), _oldMousePosition.Y),
Text = "D"
};
Controls.Add(button3);
var button4 = new Button
{
Location = new Point(_oldMousePosition.X - button1.Width/2, _oldMousePosition.Y - (int)(button1.Height * 1.5)),
Text = "A"
};
Controls.Add(button4);
button1.MouseHover += ButtonHovered;
button2.MouseHover += ButtonHovered;
button3.MouseHover += ButtonHovered;
button4.MouseHover += ButtonHovered;
}
虽然这种解决方案并不像你的图片(这是因为不同形状的按钮),它应该帮助你与您的问题。如果你的问题是不同形状的按钮,请提出一个新问题。
我希望我能帮助你。
- 1. 如何在输入按钮周围创建边框?
- 2. 节点周围的按钮
- 3. 创建按钮像图标
- 4. 剪切用户光标在X按钮周围
- 5. 在silverlight中按下鼠标按钮3
- 6. xaml按钮焦点与按钮鼠标
- 7. 如何创建提交按钮鼠标悬停?
- 8. OpenGL/C++ - 如何填充鼠标单击点周围的区域?
- 9. 按下鼠标按钮时监视鼠标坐标
- 10. 如何在java中的鼠标光标周围绘制矩形?
- 11. 如何在鼠标光标周围绘制高光
- 12. 创建一个按钮,创建按钮
- 13. GLUT鼠标按钮向下
- 14. 编辑gvim鼠标按钮
- 15. python鼠标侧按钮?
- 16. 鼠标点击按钮
- 17. QListView点击鼠标按钮
- 18. 鼠标上变更按钮
- 19. Xna很多鼠标按钮
- 20. ToolStripMenuItem中的鼠标按钮
- 21. 鼠标按钮向前python
- 22. 在空元素周围创建元素
- 23. 按钮周围的虚线边框
- 24. 删除按钮周围的灰色框
- 25. 我怎样才能使周围按钮
- 26. Python周围的白色按钮
- 27. C#循环,当鼠标按下按钮按下
- 28. C++版本创建一个鼠标simluator
- 29. 打开标签后启用按钮周围的“虚线”?
- 30. MFC鼠标移动/离开,将鼠标悬停在按钮上
对不起,我不知道如何创建这些按钮。 –
你的目标是什么:Winforms,WPF,ASP ..? __Always__正确标记您的问题! – TaW