19

我有验证用户是否是管理员的按钮。如果当前登录的用户不是管理员,则标签将显示为警告消息,然后在几秒钟后隐藏。我尝试在警告消息之后使用lblWarning.Hide();and lblWarning.Dispose();,但问题是,它甚至在显示警告消息之前就隐藏了消息。这是我的代码。

private void button6_Click(object sender, EventArgs e)
{
    if (txtLog.Text=="administrator")
    {
        Dialog();
    }

    else
    {
       lblWarning.Text = "This action is for administrator only.";
       lblWarning.Hide();
    }

}
4

5 回答 5

34

你会想用Timer. 你可能会实现这样的事情:

var t = new Timer();
t.Interval = 3000; // it will Tick in 3 seconds
t.Tick += (s, e) =>
{
    lblWarning.Hide();
    t.Stop();
};
t.Start();

而不是这个:

lblWarning.Hide();

因此,如果您希望它可见超过 3 秒,那么只需花费您想要的时间并将其乘以 1000,因为Interval它以毫秒为单位。

于 2013-04-11T14:45:49.687 回答
2

如果您在 2020 年使用 UWP XAML,并且您的 msgSaved 标签是 TextBlock,则可以使用以下代码:

DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(2);
msgSaved.Visibility = Visibility.Visible;
timer.Tick += (s, en) => {
        msgSaved.Visibility = Visibility.Collapsed;
        timer.Stop(); // Stop the timer
    };
timer.Start(); // Starts the timer. 
于 2020-12-04T13:43:42.503 回答
0

当然你可以只使用 Thread.Sleep

lblWarning.Text = "This action is for administrator only.";
System.Threading.Thread.Sleep(5000);
lblWarning.Hide();

其中 5000 = 您要暂停/等待/睡眠的毫秒数

于 2013-04-11T16:12:12.720 回答
0

以下解决方案适用于 wpf 应用程序。当您启动计时器时,将启动一个单独的线程。要从该线程更新 UI,您必须使用 dispatch 方法。请阅读代码中的注释并相应地使用代码。必需的标头

使用 System.Timers;

private void DisplayWarning(String message, int Interval = 3000)
    {
        Timer timer = new Timer();
        timer.Interval = Interval;
        lblWarning.Dispatcher.Invoke(new Action(() => lblWarning.Content = message));
        lblWarning.Dispatcher.Invoke(new Action(() => lblWarning.Visibility = Visibility.Visible));

        // above two line sets the visibility and shows the message and interval elapses hide the visibility of the label. Elapsed will we called after Start() method.

        timer.Elapsed += (s, en) => {
            lblWarning.Dispatcher.Invoke(new Action(() => lblWarning.Visibility = Visibility.Hidden));
            timer.Stop(); // Stop the timer(otherwise keeps on calling)
        };
        timer.Start(); // Starts the timer. 
    }

用法 :

DisplayWarning("Warning message"); // from your code
于 2018-06-22T18:27:02.193 回答
0

此功能在标签上显示特定持续时间的特定味精,包括文本样式

public void show_MSG(string msg, Color color, int d)
    {
        this.Label.Visible = true;
        this.Label.Text = msg;
        this.Label.ForeColor = color;
        Timer timer = new Timer();
        timer.Interval = d;
        timer.Tick += (object sender, EventArgs e) =>
        {
            this.Label.Visible = false;
        }; timer.Start();
    
    }
于 2021-03-16T16:29:09.273 回答