2017-09-16 2 views
0

Ich versuche, einige Menüleistenelemente zu deaktivieren, während ein Textfeld "Calculating ..." anzeigt. Sobald dieser Wert verschwindet, möchte ich die Menüpunkte erneut aktivieren. Sein Zweck besteht nicht darin, MD5/CRC32-Berechnungen zu unterbrechen. Bisher habe ich verschiedene Methoden ausprobiert und bisher kein Glück gehabt. Was unten aufgeführt ist sollte funktionieren, aber aus irgendeinem Grund nicht. Jede Hilfe wäre willkommen.C# - Aktivieren/Deaktivieren von MenuStrip-Elementen basierend auf dem TextBox-Wert

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

Antwort

0

ich nicht ganz kann Ihnen sagen, warum der Code nicht tun, was Sie erwarten, aber ich kann einen Vorschlag machen, dass Ihr Ansatz ändern und helfen, Ihr Ziel zugleich erreichen kann. Was Sie versuchen sollten, sollte nicht sein, das Menü zu deaktivieren, wenn das Textfeld "Calculating" enthält, sondern stattdessen sollten Sie das Menü deaktivieren, während die Berechnungen durchgeführt werden. Aus Sicht der Benutzer/Benutzeroberflächen sind dies die gleichen Dinge, aber die inneren Abläufe Ihres Programms wissen es besser.

Basierend auf Sie Pastebin Code, versuchen Sie dies:

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 
} 

und

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

wo die neue Methode UpdateUI() wie folgt aussieht:

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

, Beachten Sie auch, wie Sie sind in der Lage, einfach !calculating in der if-Anweisung stattsetzen. Dies liegt daran, dass der Wert bereits true oder false ist, so dass Sie ihn nicht mit irgendetwas vergleichen müssen, um das herauszufinden. Das Gleiche gilt für Ihren ursprünglichen Code, aber Sie brauchen ihn nicht mehr mit diesem Ansatz.

+0

Ich denke, die Art, wie ich das MD5 bin, macht es schwierig, den von Ihnen vorgeschlagenen Code zu implementieren. Ich habe ein paar verschiedene Wege ausprobiert, konnte es aber nicht für mich arbeiten lassen. Zur Verdeutlichung, hier ist ein Link zu allen Code in Bezug auf die MD5-Berechnungen. https://pastebin.com/hBqettbc –

+0

@LordFoxCat Es ist ein wenig komplizierter, aber ich habe meine Antwort aktualisiert, so dass es mit Ihrem Code arbeiten sollte. Lass es mich wissen, wenn das hilft. – Jaquez

+0

Das hat den Trick für mich gemacht. Vielen Dank für Ihre Hilfe! –

Verwandte Themen