将标签文本显示为警告信息,并在几秒钟后隐藏它
本文关键字:几秒 隐藏 显示 文本 标签 警告 信息 | 更新日期: 2023-09-27 18:08:34
我有验证用户是否是管理员的按钮。如果当前登录的用户不是管理员,那么标签将显示为警告消息,然后在几秒钟后隐藏。我尝试在警告消息后使用lblWarning.Hide();
和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();
}
}
你要用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
是以毫秒为单位的。
如果你在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.
当然你可以直接使用Thread。睡眠
lblWarning.Text = "This action is for administrator only.";
System.Threading.Thread.Sleep(5000);
lblWarning.Hide();
其中5000 =您想要暂停/等待/休眠的毫秒数
下面的解决方案适用于wpf应用程序。当您启动计时器时,将启动一个单独的线程。要从那个线程更新UI,你必须使用分派方法。请阅读代码中的注释并使用相应的代码。要求标题
使用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
此函数显示标签上特定时间持续时间的特定MSG,包括文本样式
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();
}