如果表单处于活动状态,则停止

时间:2015-02-03 17:37:36

标签: c# winforms timer

如果用户使用当前表单(例如,在文本框上书写),是否可以停止计时器。这样做的原因是我每次刷新表单("从数据库更新数据")但如果用户正在写文本框并且计时器到达那一分钟,则重置文本框和用户必须再次写,换句话说,它有约。 1分钟完成在表格上的写作。

private void timer1_Tick(object sender, EventArgs e)
    {            
        SelectProgress();
    }
private void SelectProgreso()
    {

      try
         {

            OleDbDataReader reader;
            reader = oleDbCmd.ExecuteReader();
            reader.Read();

            progress= reader[1].ToString();

            int op = Int32.Parse(progress);
            switch (op)
            {
                case 1:
                    progressBar1.Value = 20;

                    button1.Enabled = false;
                    break;
                case 2:
                    progressBar1.Value = 40;

                    button1.Enabled = false;
                    break;
                case 3:
                    progressBar1.Value = 60;

                    button1.Enabled = false;
                    break;
                case 4:
                    progressBar1.Value = 80;


                    break;
                case 5:
                    progressBar1.Value = 100;

                    button1.Enabled = false;
                    break;
                default:
                    Console.WriteLine("Error");
                    break;
            }
        }
        catch (OleDbException error)
        {
            MessageBox.Show(error.ToString());
        }
        finally
        {
            mycon.Close();
        }
   }

我正在使用Visual Studio 2013 WindowsForm。 任何帮助或评论都表示赞赏。 谢谢。

4 个答案:

答案 0 :(得分:1)

没有直接方式来执行此操作,就像没有直接的方法来确定Form是否是"活跃的" (除了其他原因,因为"活跃"对不同的人意味着不同的事情)。

可以做的一些事情:

  1. 不要在数据库刷新时更新您的可编辑控件。
  2. 停止用户输入的计时器,比如听取所有控件的TextChanged事件。
  3. Focus个活动停止计时器。
  4. 请注意,无论何时停止计时器,您还需要定义启动它的逻辑备份(可能是另一个计时器!)。基本上,你需要定义什么"活跃"和"不活跃"实际上是指,并根据它编写你的逻辑。

答案 1 :(得分:1)

将第二个计时器连接到接口的TextChanged等事件,同时停止主计时器。 第二个计时器滴答事件然后在没有输入的情况下几秒后重新启动主计时器。

编辑:像这样:)

    Timer mainTimer;
    Timer activityTimer;

    public Form1()
    {
        mainTimer = new Timer();
        activityTimer = new Timer();
        mainTimer.Interval = 60000;
        activityTimer.Interval = 2000;
        activityTimer.Tick += activityTick;
        InitializeComponent();
    }

    private void activityTick(object sender, EventArgs e)
    {
        mainTimer.Start();
        activityTimer.Stop();
    }

    private void onUserinput(object sender, EventArgs e)
    {
        mainTimer.Stop();
        activityTimer.Stop();
        activityTimer.Start();
    }

答案 2 :(得分:0)

是的,您可以将事件处理程序添加到表单上的所有相关控件,以更新" lastEdited"字段或类似的东西,以便,当计时器关闭时,您可以检查自上次编辑以来它已经存在多长时间,并且仅在数据已经足够长时才重新加载。

答案 3 :(得分:0)

您可以做的另一件事是在更新之前检查文本框是否具有焦点,如果它得到了关注,则不要更新它。