如何在C#WinForm中删除/删除/撤消抽绳

如何在C#WinForm中删除/删除/撤消抽绳,c#,winforms,drawstring,C#,Winforms,Drawstring,我的表单有一个背景图像。我有一些图片框,我正在用它们作为按钮。我正试图有一个鼠标事件/鼠标左键事件来显示标签或图片盒 我一直在尝试各种方法。我得到了类似的结果——标签或图片盒看起来很好,但在MouseLeave上,标签1.Visible=false;在窗体的背景图像上出现一个非常临时的空白框。虽然它功能齐全,但似乎有点滞后,但会让程序看起来很糟糕 我尝试了拉丝法。这似乎是一个不错的选择,但我不知道如何在MouseLeave事件中删除该对象 这可能吗?如果没有,有没有更好的选择来完成我想要完成的事

我的表单有一个背景图像。我有一些图片框,我正在用它们作为按钮。我正试图有一个鼠标事件/鼠标左键事件来显示标签或图片盒

我一直在尝试各种方法。我得到了类似的结果——标签或图片盒看起来很好,但在MouseLeave上,标签1.Visible=false;在窗体的背景图像上出现一个非常临时的空白框。虽然它功能齐全,但似乎有点滞后,但会让程序看起来很糟糕

我尝试了拉丝法。这似乎是一个不错的选择,但我不知道如何在MouseLeave事件中删除该对象

这可能吗?如果没有,有没有更好的选择来完成我想要完成的事情

以下是我如何绘制字符串(在buttonClick事件中进行测试):


您可以在绘制事件中绘制,在
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();
    }
}

您可以在绘制事件中绘制,在
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();
    }
}

将画笔更改为背景色,然后再次绘制。我的表单背景有一个图像-有办法解决这个问题吗?我认为Alex的答案应该有效。你必须过度绘制它。倾向于造成非常轻微的滞后。只是为了隐藏工件。将笔刷更改为背景色,然后再次绘制。我的表单背景有一个图像-有办法解决吗?我认为Alex的答案应该有效。你必须过度绘制它。倾向于造成非常轻微的滞后。只是为了隐藏工件。这个解决方案非常有效。谢谢你,好先生。你就是那个人!Alex K-关于这个解决方案,我还有一个问题要问你-我将绘制几个不同的字符串,具体取决于悬停在哪个按钮上,所有“标签”都将位于同一位置(中央屏幕)。我弄乱了一些不同的设置,似乎找不到一种方法来实现这一点,因为最上面的picturebox,即使是空的,背景设置为透明的,也会屏蔽它后面的所有picturebox。我试着用一个picturebox和一些if语句,但无法让所有按钮“共享”一个PB来绘制字符串。有什么想法吗?这个解决方案非常有效。谢谢你,好先生。你就是那个人!Alex K-关于这个解决方案,我还有一个问题要问你-我将绘制几个不同的字符串,具体取决于悬停在哪个按钮上,所有“标签”都将位于同一位置(中央屏幕)。我已经用一些不同的设置来乱搞,似乎找不到一种方法来使它发挥作用,因为它是最顶级的图片盒,即使是空的,背景设置为透明的,也会阻止后面的所有图片盒。我试着用一个picturebox和一些if语句,但无法让所有按钮“共享”一个PB来绘制字符串。有什么想法吗?