2011-11-26 126 views
3

我目前正在做一個家庭作業,我需要設置一個計算器類型的程序。它需要讀取一個或兩個用戶輸入值(取決於計算),然後根據這些值執行計算。啓用基於文本框和單選按鈕的按鈕

我現在有

  • 2文本框(tbInput1tbInput2),
  • 4單選按鈕,
  • 一個按鈕(btnCalc
  • 空白label在其中顯示結果。

兩個radioButtons(rbtnTraprbtnFak)在選中時禁用第一個文本框;另外兩個需要輸入兩個值,因此在檢查時啓用兩個文本框。 btnCalc應該在相關數量的文本框具有值時啓用自己 - 相關數量的文本框取決於檢查哪個單選按鈕。

的問題是,當我檢查rbtnTraprbtnFak(禁用tbInput1)和tbInput2輸入一個整數,btnCalc撐禁用。

我會盡力解釋我到目前爲止有:

  • _TextChanged事件tbInput1,我有第二if塊貼在下面的精確副本。 tbInput1僅在rbtnPotrbtnFib被選中時纔有效,以便僅在這種情況下才能運行控制。
  • _TextChanged事件tbInput2,我有以下的,因爲tbInput2總是啓用和控制必須運行無論哪個單選按鈕被選中,雖然控制應該運行不同,如果我檢查rbtnTraprbtnFak相到rbtnPotrbtnFib

或者這就是我對它的理解。我當然願意接受建議和更正。

private void tbInput2_TextChanged(object sender, EventArgs e) 
{ 
    //For single-field values 
    if ((rbtnTrap.Checked || rbtnFak.Checked) && 
     !string.IsNullOrWhiteSpace(this.tbInput2.Text)) 
    { 
     btnCalc.Enabled = true; 
    } 
    else 
    { 
     btnCalc.Enabled = false; 
    } 
    // For multi-field values 
    if ((rbtnPot.Checked || rbtnFib.Checked) && 
     (!string.IsNullOrWhiteSpace(this.tbInput1.Text) 
     && !string.IsNullOrWhiteSpace(this.tbInput2.Text))) 
    { 
     btnCalc.Enabled = true; 
    } 
    else 
    { 
     btnCalc.Enabled = false; 
    } 
} 

回答

2

因爲這是一項家庭作業,所以我不打算給出直接的答案,而是提示:問題出在tbInput2_TextChanged事件(您發佈的代碼)的代碼中。

當選中rbtnTraprbtnFak時,您的代碼將在您認爲不會的後面運行。在tbInput2_TextChanged代碼的第一行上設置一個斷點(F9),然後在tbInput2中輸入一些文本後,逐步運行代碼(F10)。
您會看到爲什麼您的按鈕btnCalc已啓用,因爲您認爲它是,,但在下一時刻處於禁用狀態。

如果您之後需要更多幫助,請隨時發表評論。 :)


編輯

的問題來自於您的if塊。當rbtnTraprbtnFak一個檢查:

  • 您的代碼將第一個塊的if子句中運行,然後做btnCalc.Enabled = true;但...
  • 它也將第二塊的else子句中運行(因爲(rbtnPot.Checked || rbtnFib.Checked)是錯誤的),因此做btnCalc.Enabled = false;
+0

啊哈!那麼,我完全可以明白,爲什麼處置!= null組件會重新禁用該按鈕。但是,我不確定它來自哪裏,因爲我必須設定程序以某種方式來完成它。任何提示? (並沒有直接的答案是完全正確的,我想學習 - 不復制/粘貼:)) – Xarth

+0

我不知道你爲什麼在討論「*處置!=空分量*」。你在'someObject.Dispose()'中使用「處置」這個術語嗎? (請參閱我的編輯您的問題) – Otiel

+0

啊,對不起。一旦我完成了F10的運行問題,它將我帶到了designer.cs文件中。我首先看到的是'protected override void Dispose(bool disposing)',並且在if(disposing &&(components!= null))之下。顯然不是你的意思。感謝您的編輯和提示。我會看到關於調整我的代碼以在正確的子句之後停止檢查。 :) – Xarth

0

我不知道我有多麼瞭解你的問題(我很抱歉,解釋有點所有的地方),但有件事我看,是你只實施當你有兩個控件需要檢查時,在一個事件中測試你的測試。

這聽起來像一個簡單的問題,但我真的不明白在哪裏實施什麼和誰應該做什麼,所以如果我的2美分以上是無用的,你可以再次解釋這個問題,那很可能幫助尋找解決方案

+0

沒問題!爲清晰起見編輯 - 我希望。希望我的彩鈴現在更有意義。 :) – Xarth