winforms 如何在Winform中显示通知类型(吐司消息)?

zdwk9cvp  于 2022-12-19  发布在  其他
关注(0)|答案(2)|浏览(285)

让我们以android为例,假设你给某人发送一条消息,消息发送后你可以在屏幕上看到(几秒钟)Your message was send之类的通知。

这正是我想在Winform中找到的。在我的Winform应用程序中,用户单击按钮,我想做出某种UI响应,向他显示几秒钟的消息,如Button clicked
怎么做呢?

**P.S.**实际上我试图找出如何做到这一点,但我发现的一切都是在屏幕右下角的通知。这不是我真正要找的。我需要像你可以在屏幕截图上看到的东西。这段文字应该出现在表格中,而不是在屏幕的角落。
P.S 2工具提示也不是我正在寻找的。工具提示是绑定在按钮(视图)附近的东西。我需要一种通用的用户界面响应。用户点击按钮,而不是向他显示一个对话框,迫使用户移动鼠标并关闭对话框,我需要一种软消息,几秒钟后消失。

rta7y2nd

rta7y2nd1#

我需要一种柔软的信息,消失后几秒钟。
我认为工具提示就是你要找的。这个想法是你可以通过编程控制在哪里显示工具提示,什么时候隐藏它。
请启动一个新的WinForms项目。在窗体中添加三个按钮、工具提示和计时器。编写下一个事件处理程序(并将它们绑定到相应的组件):

private void button_Click(object sender, EventArgs e)
    {            
        toolTip1.Show(((Button)sender).Text + " is pressed", this, 300, 300);
        timer1.Enabled = true;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Enabled = false;
        toolTip1.Hide(this);
    }

演示开始后,您将看到一个带有特定文本的工具提示出现在同一位置,持续1秒。

mlmc2os5

mlmc2os52#

@Miamy的解决方案不错,但是你必须在通知框中居中文本,并且你不需要使用计时器。这里是自定义工具提示类,它将工具提示文本位置居中,你可以看到下面的输出:

此外,我还添加了一些着色功能以及默认计时器实现。

class CustomToolTip : ToolTip
{

    public int SIZE_X = 500;
    public int SIZE_Y = 50;

    public CustomToolTip()
    {
        this.OwnerDraw = true;
        this.Popup += new PopupEventHandler(this.OnPopup);
        this.Draw += new DrawToolTipEventHandler(this.OnDraw);
    }

    string m_EndSpecialText;
    Color m_EndSpecialTextColor = Color.Black;

    public Color EndSpecialTextColor
    {
        get { return m_EndSpecialTextColor; }
        set { m_EndSpecialTextColor = value; }
    }

    public string EndSpecialText
    {
        get { return m_EndSpecialText; }
        set { m_EndSpecialText = value; }
    }

    private void OnPopup(object sender, PopupEventArgs e) // use this event to set the size of the tool tip
    {
        e.ToolTipSize = new Size(SIZE_X, SIZE_Y);
    }

    private void OnDraw(object sender, DrawToolTipEventArgs e) // use this event to customise the tool tip
    {
        Graphics g = e.Graphics;

        LinearGradientBrush b = new LinearGradientBrush(e.Bounds,
            Color.AntiqueWhite, Color.LightCyan, 45f);

        g.FillRectangle(b, e.Bounds);

        g.DrawRectangle(new Pen(Brushes.Black, 1), new Rectangle(e.Bounds.X, e.Bounds.Y,
            e.Bounds.Width - 1, e.Bounds.Height - 1));

        System.Drawing.Size toolTipTextSize = TextRenderer.MeasureText(e.ToolTipText, e.Font);

        g.DrawString(e.ToolTipText, new Font(e.Font, FontStyle.Bold), Brushes.Black,
            new PointF((SIZE_X - toolTipTextSize.Width)/2, (SIZE_Y - toolTipTextSize.Height) / 2)); 

        b.Dispose();
    }
}

您可以按以下代码调用此工具提示:

CustomToolTip notifyError = new CustomToolTip();
                notifyError.Show("Please enter a number.", this, 100, 100, 2000);

上面的代码在100,100位置创建通知框2秒。

相关问题