【问题标题】:Add item to listbox and then remove after 30 seconds将项目添加到列表框,然后在 30 秒后删除
【发布时间】:2015-07-21 05:33:48
【问题描述】:

我正在尝试将标签 ID (RFID) 添加到列表框,然后在 30 秒后将其删除。最好的方法是什么?

txtTagID.Text = s1.Replace(" ", "").ToLower();
if (lstTagsHold.Items.Contains(txtTagID.Text) == false)
{
   lstTagsHold.Items.Add(txtTagID.Text);
}

【问题讨论】:

    标签: c# time listbox


    【解决方案1】:

    在您的表单上放置一个 System.Windows.Forms.Timer 并将间隔设置为大约 1 秒(或更少,具体取决于所需的精度)。声明 ExpiringItem 类以存储添加条目的时间。在您的 timer_click 事件中检查过期项目并删除。

    class ExpiringItem
    {
        private string text;
        public ExpiringItem(string text)
        {
            this.text = text;
            this.Added = DateTime.Now;
        }
        public DateTime Added { get; private set; }
        public override string ToString()
        {
            return text;
        }
    }
    
    private void timer1_Tick(object sender, EventArgs e)
    {
        for (int i = listBox1.Items.Count -1; i > -1; i--)
        {
            var exp = (ExpiringItem)listBox1.Items[i];
            var timeVisible = DateTime.Now - exp.Added;
            if (timeVisible.TotalSeconds > 30)
                listBox1.Items.RemoveAt(i);
    
        }
    }
    

    要将项目添加到您的 ListBox 中,请执行以下操作

    lstTagsHold.Items.Add(new ExpiringItem(txtTagID.Text));
    

    【讨论】:

    • 抱歉,最后一个问题?如果 VAR exp 为 null,我该如何处理?
    【解决方案2】:

    尝试使用计时器控件(如果您使用的是 winforms)

    【讨论】:

    • 我正在使用 winforms,但在不同的时间可能有多个条目。我只想删除已存在 30 秒的条目
    【解决方案3】:
    // Declare the timer
    private static System.Timers.Timer objTimer = new System.Timers.Timer(30000);
    
    // Attach the event handler
    objTimer.Elapsed += OnTimedElapsed;
    
    
    private static void OnTimedElapsed(Object source, System.Timers.ElapsedEventArgs e)
        {
            lstTagsHold.Items.Remove(txtTagID.Text);
        }
    

    【讨论】:

    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多