我正在尝试在文本框显示时禁用某些菜单条项目"计算..."。一旦该值消失,我希望重新启用菜单项。其目的不是中断MD5 / CRC32计算。到目前为止,我已经尝试了各种代码方法,到目前为止还没有运气。 下面列出的内容应该有效,但出于某种原因却没有。任何帮助将不胜感激。
// 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 :(得分:0)
我不能完全告诉你为什么代码没有达到你的期望,但我可以提出改变你的方法的建议,同时也可以帮助你实现目标。当文本框包含"Calculating"
时,您要做的不应该是禁用菜单,而是在执行计算时禁用菜单。从用户/ UI的角度来看,这些是相同的,但程序的内部工作知道得更好。
根据您的PasteBin代码,试试这个:
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
中。这是因为该值已经为true
或false
,因此您无需将其与任何内容进行比较即可。同样的事情适用于您的原始代码,但您不再需要这种方法。