简体   繁体   中英

C# - Enable/Disable MenuStrip Item Based On TextBox Value

I am trying to disable some menu strip items while a textbox is displaying "Calculating...". Once that value goes away, I wish to re-enable the menu items. Its purpose is not to interrupt MD5/CRC32 calculations. So far, I've tried various method of code, and have had no luck so far. What's listed below should work, but for some reason it does not. Any help would be appreciated.

// 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;
        }

I can't quite tell you why the code isn't doing what you expect, but I can make a suggestion that will change your approach and may help achieve your goal at the same time. What you are trying to do shouldn't be to disable the menu when the textbox contains "Calculating" but instead you should disable the menu while the calculations are being performed. From a user/UI perspective, these are the same thing, but the inner-workings of your program know better.

Based on you PasteBin code, try this:

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
}

and

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

where the new method UpdateUI() looks like this:

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;
}

Also, notice how you are able to just put !calculating in the if statement rather than calculating == false . This is because the value is already true or false so you don't have to compare it to anything to figure that out. The same thing applies to your original code but you don't need it anymore with this approach.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM