2017-09-16 54 views
0

我试图在文本框显示“正在计算...”时禁用某些菜单条项目。一旦该值消失,我希望重新启用菜单项。其目的不是要中断MD5/CRC32计算。到目前为止,我已经尝试了各种代码方法,至今还没有运气。 下面列出的应该是工作,但由于某种原因,它不。任何帮助,将不胜感激。C# - 启用/禁用基于TextBox值的MenuStrip项目

// THIS PART WORKS 
if (boxMD5.Text.Contains("Calculating") == true) 
     { 
      openROMToolStripMenuItem.Enabled = false; 
      saveROMDataToolStripMenuItem.Enabled = false; 
      asTXTToolStripMenuItem.Enabled = false; 
      asHTMLToolStripMenuItem.Enabled = false; 
     } 
// THIS PART DOES NOT WORK 
else if (boxMD5.Text.Contains("Calculating") == false) 
     { 
      openROMToolStripMenuItem.Enabled = true; 
      saveROMDataToolStripMenuItem.Enabled = true; 
      asTXTToolStripMenuItem.Enabled = true; 
      asHTMLToolStripMenuItem.Enabled = true; 
     } 

回答

0

我不能完全告诉你为什么代码没有做你期待什么,但我可以提出一个建议,这将改变你的方法,并可以帮助实现在同一时间你的目标。当文本框包含"Calculating"时,您要做的不应该是禁用菜单,而应该在执行计算时禁用菜单。从用户/用户界面的角度来看,这些都是一样的,但是程序的内部工作知道得更好。

根据您引擎收录代码,试试这个:

private void openROMToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    //Other code omitted for brevity 

    if (File.Exists(OpenFileDialog1.FileName)) 
    { 
     UpdateUI("Calculating..."); 
     backgroundWorker1.RunWorkerAsync(OpenFileDialog1.FileName); 
    } 

    //Other code omitted for brevity 
} 

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    UpdateUI(e.Result.ToString()); 
} 

其中新方法UpdateUI()看起来是这样的:

void UpdateUI(string hash) 
{ 
    var calculating = hash == "Calculating..."; 

    if (!calculating) 
    { 
     progressBar1.Value = 0; 
    } 

    openROMToolStripMenuItem.Enabled = !calculating; 
    saveROMDataToolStripMenuItem.Enabled = !calculating; 
    asTXTToolStripMenuItem.Enabled = !calculating; 
    asHTMLToolStripMenuItem.Enabled = !calculating; 

    boxMD5.Text = hash; 
} 

另外,还要注意你是如何能够将!calculating放在if语句中而不是calculating == false。这是因为该值已经是truefalse,所以您不必将其与任何事物进行比较就可以知道。同样的事情适用于您的原始代码,但您不再需要这种方法。

+0

我想我正在计算MD5的方式使得难以实现您建议的代码。我尝试了几种不同的方式,但无法让它为我工作。为了澄清,这里有一个指向与MD5计算相关的所有代码的链接。 https://pastebin.com/hBqettbc –

+0

@LordFoxCat它有点复杂,但我更新了我的答案,所以它应该与您的代码一起工作。让我知道这是否有帮助。 – Jaquez

+0

这为我做了诡计。谢谢您的帮助! –

相关问题