【问题标题】:How to fire Text.TextChanged event with timer如何使用计时器触发 Text.TextChanged 事件
【发布时间】:2016-04-29 11:17:10
【问题描述】:

我对路径进行了一些验证(如果指定目录中存在或不存在文件),我需要在错误发生一段时间后启动 TextChangedEvent 以再次检查该文件。 这是我用来检查此错误的代码:

 private void textBoxNovoSvrc_TextChanged(object sender, EventArgs e)
        {
            First++;
            bool ok = false;
            int same = 0;
            try
            {

                if (!String.IsNullOrWhiteSpace(textBoxNovoSvrc.Text) && Program.Funcoes.ExisteDirectoria(textBoxNovoSvrc.Text) == true)
                {
                    if (Erro2 == -1 || Erro2 == 0)

                        same = TextBoxSame(First);
                    if (same == 1)
                        return;
                    if (Global.VersaoInvalidaCli == true && Global.VersaoInvalidaSvrc == true)
                    {
                        Global.SvrcChanged = true;
                        buttonContinuar.PerformClick();

                    }
                    if (Program.Funcoes.ExisteFicheiro(textBoxNovoSvrc.Text + @"\OrcaService.exe.config") == true)
                    {
                        if (Global.VersaoInvalidaCli == true && Global.VersaoInvalidaSvrc == true)
                        {
                            buttonContinuar.PerformClick();
                            epDoesntExist1.Dispose();
                            epInvalidVersionSvrc.SetError(textBoxNovoSvrc, "Versão de Update Inválida!");
                            epInvalidVersionSvrc.Dispose();
                            epInvalidVersionCli.Dispose();
                            textBoxNovoCli.Text = Directory.GetParent(textBoxNovoSvrc.Text) + @"\Orca";
                            return;

                        }
                        if (textBox1 == textBoxNovoSvrc.Name || textBox2 == textBoxNovoSvrc.Name)
                        {
                            TextBoxes(textBox1, textBox2, true);
                        }
                        //Colocar aqui a versão mais recente do update;
                        string path = Directory.GetParent(textBoxNovoSvrc.Text).ToString();
                        //string Nome = System.IO.Path.GetFileName(path);
                        labelNovaVersãoServ.Text = Program.Funcoes.NovaVersao(path, Global.versionError);
                        Erro2 = 0;
                        ok = true;
                        errorProviderNoSvrc.Dispose();
                        epInvalidVersionSvrc.Dispose();
                        epDoesntExist2.Dispose();
                        Global.NovoServiço = textBoxNovoSvrc.Text;
                        textBoxNovoSvrc.BackColor = System.Drawing.Color.Green;
                        Continue++;
                        if (Continue >= 4)
                            buttonContinuar.Enabled = true;
                        else
                        {

                            buttonContinuar.Enabled = false;
                        }
                        btnBrowse2.Enabled = true;
                        textBoxNovoCli.Enabled = true;
                        textBoxNovoCli.Text = "";
                        textBoxNovoCli.Text = Directory.GetParent(textBoxNovoSvrc.Text).ToString() + @"\Orca";

                    }
                    else
                    {
                        ok = false;
                        textBoxNovoSvrc.BackColor = System.Drawing.Color.Red;
                        buttonContinuar.Enabled = false;
                        Erro2 = 1;
                        textBoxNovoSvrc.Focus();
                        epDoesntExist2.Dispose();
                        epInvalidVersionSvrc.Dispose();
                        errorProviderNoSvrc.SetError(textBoxNovoSvrc, "Ficheiro \"OrcaService.exe.config\" não existe na directoria");

                        return;

                    }

errorProviderNoSvrc.SetError(textBoxNovoSvrc, "Ficheiro \"OrcaService.exe.config\" não existe na directoria");之后的最后一个else中,我需要触发一个计时器等待大约5秒,然后再触发textChanged事件。 这是可能的还是我需要采取另一种方法,例如启动一个消息框,要求再次检查文件并通过将路径存储在 var 上而不是更改文本来“手动”启动 TextChanged 事件像 TexBoxNovoSvrc.Text = "" 这样的文本框,而不是 TextBoxNovoSvrc.Text = OldPath.

【问题讨论】:

  • 为什么不直接调用它呢? textBoxNovoSvrc_TextChanged(null, null) 因为 args 是标准 args..

标签: c# text textbox messagebox textchanged


【解决方案1】:

您可以使用计时器:

一开始(在textBoxNovoSvrc_TextChanged之外),可能在构造函数中

Timer t = new Timer();
t.Interval = 5000;
t.Tick += textBoxNovoSvrc_TextChanged; 

就在最后一个return之前

t.Start();

textBoxNovoSvrc_TextChanged的开头:

if(t.Enabled){
    t.Stop()
}

【讨论】:

  • 好的似乎是个好主意。 “一开始”到底指的是什么?
  • 活动开始textBoxNovoSvrc_TextChanged...已编辑
  • 像魅力一样工作 :D 谢谢。另一个问题,如果我决定在那 5 秒后启动一个消息框,我需要更改该代码吗?
  • 您可以将 MessageBox.Show() 附加到 Tick 事件...请参阅:stackoverflow.com/questions/4100349/…
猜你喜欢
  • 1970-01-01
  • 2019-11-02
  • 2012-03-13
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多