2017-09-16 2 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"이 포함되어있을 때 메뉴를 비활성화하지 말고 대신 계산을 수행하는 동안 메뉴를 비활성화해야합니다. 사용자/UI 관점에서 볼 때, 이것들은 똑같지 만 프로그램의 내부 동작이 더 잘 알 수 있습니다. 페이스트 빈 코드 당신을 기반으로

,이 시도 :

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

, 당신이 얼마나 통지보다는 if 문에 !calculating을 넣을 수 있습니다.. 이는 값이 이미 true 또는 false이기 때문에이를 파악하기 위해 비교할 필요가 없기 때문입니다. 원본 코드에도 똑같은 내용이 적용되지만이 방법에서는 더 이상 필요하지 않습니다.

+0

MD5를 계산하는 방식으로 제안한 코드를 구현하는 것이 어렵다고 생각합니다. 나는 여러 가지 방법을 시도했지만 그것이 나를 위해 일할 수 없었습니다. 설명을 위해 MD5 계산과 관련된 모든 코드에 대한 링크가 있습니다. https://pastebin.com/hBqettbc –

+0

@LordFoxCat 좀 더 복잡하지만 내 대답이 업데이트되어 코드와 함께 작동해야합니다. 도움이되는지 알려주세요. – Jaquez

+0

이것은 나를 위해 트릭을했습니다. 도와 주셔서 감사합니다! –