我的表单有背景图片。我有一些PictureBoxes我用作按钮。我试图让MouseEnter / MouseLeave事件显示标签或pictureBox。
我一直在尝试各种方法。我得到了类似的结果 - 标签或图片框看起来不错,但在MouseLeave上,label1.Visible = false;在窗体的背景图像上生成一个非常临时的空白框。虽然它功能齐全,但它似乎只是一个非常小的延迟,但会使程序看起来很糟糕。
我尝试使用DrawString方法。这似乎是一个不错的选择,但我无法弄清楚如何删除MouseLeave事件上的对象。
这可能吗?如果没有,是否有更好的选择来完成我想要完成的任务?
以下是我绘制字符串的方法(在buttonClick事件中进行测试):
Graphics g = this.CreateGraphics();
string letter = "Yo Dawg!";
g.DrawString(letter, new Font(FontFamily.GenericSansSerif, 20, FontStyle.Regular),
new SolidBrush(Color.Black), 100, 100);
答案 0 :(得分:4)
你会在paint事件中绘制,在MouseLeave
设置一个标志,导致一个带有Invalidate()
的绘画,然后在绘画内如果未设置标志则不绘制任何东西。
public partial class TheForm : Form
{
private Font _font = new Font(FontFamily.GenericSansSerif, 20, FontStyle.Regular);
private bool _hovering = false;
public TheForm() {
InitializeComponent();
picBox.Paint += new PaintEventHandler(picBox_Paint);
picBox.MouseEnter += (sender, e) => UpdateText(true);
picBox.MouseLeave += (sender, e) => UpdateText(false);
}
private void picBox_Paint(object sender, PaintEventArgs e) {
if (_hovering)
e.Graphics.DrawString("Yo Dawg!", _font, Brushes.Black, 100, 100);
}
private void UpdateText(bool show) {
_hovering = show;
picBox.Invalidate();
}
}