C# - 根据TextBox值启用/禁用MenuStrip项

时间:2017-09-16 23:17:30

标签: c# textbox menustrip

我正在尝试在文本框显示时禁用某些菜单条项目"计算..."。一旦该值消失,我希望重新启用菜单项。其目的不是中断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;
        }

1 个答案:

答案 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中。这是因为该值已经为truefalse,因此您无需将其与任何内容进行比较即可。同样的事情适用于您的原始代码,但您不再需要这种方法。