簡體   English   中英

如何比較兩個文本框?

[英]How can I compare two text boxes?

我正在嘗試比較兩個文本框,以查看它們是否為空,但出現異常錯誤:

輸入的字符串格式不正確

碼:

private void btncalc_Click(object sender, EventArgs e)
{
    try
    {
        int ina= int.Parse(txttea.Text);
        int inb= int.Parse(txtcoffee.Text);
        int inc = 0, ind = 0;
        if (this.txttea.Text == "" && this.txtcoffee.Text == "")  // this not working
        {
            MessageBox.Show("select a item");
            txttea.Focus();
        }
        if (cbxwithoutsugar.Checked)
        {
            inc = (ina * 20);
        }
        else
        {
            inc = (ina * 8);
        }
        if (cbxcoldcoffee.Checked)
        {
            ind = (inb * 10);
        }
        else
        {
            ind = (inb * 5);
        }
        txtamount.Text = (Convert.ToInt32(inc) + Convert.ToInt32(ind)).ToString();
    }
    catch (Exception a)
    {
        MessageBox.Show(a.Message);
    }
}

您應該首先檢查文本框是否為空, 然后才嘗試獲取值。
另外,像這樣使用String.IsNullOrEmpty

    if (String.IsNullOrEmpty(txttea.Text) || String.IsNullOrEmpty(txtcoffee.Text)) 
    {
        MessageBox.Show("select a item");
        txttea.Focus();
    }
    int ina= int.Parse(txttea.Text); // See comment below about TryParse
    int inb= int.Parse(txtcoffee.Text);
    int inc = 0, ind = 0;

另外,使用TryParse而不是Parse(並且Trimming總是避免空白的好主意):

int ina;
if (!Int32.TryParse(txttea.Text.Trim(), out ina))
{
   MessageBox.Show("Value is not a number");
}

嘗試使用TryParse方法,因為如果存在空格,則您的代碼將失敗,使用TryParse無需嘗試捕獲,只需將兩個int進行比較即可為零,例如:

int ina =0 , inb =0;

int.TryParse(txttea.Text, out ina);
int.TryParse(txtcoffee.Text, out inb);

if (ina == 0 && this.inb == 0)  // this not working
{

}

建議您使用數字時,建議您使用NumericUpDown而不是TextBox。 這樣,您可以使用“價值”獲取咖啡和茶的數量。

private void btncalc_Click(object sender, EventArgs e)
{
    try
    {
        int ina= numtea.Value;
        int inb= numcoffee.Value;
        int inc = 0, ind = 0;
        if (ina == 0 && inb == 0)  // this not working
        {
            MessageBox.Show("select a item");
            numtea.Focus();
        }
        if (cbxwithoutsugar.Checked)
        {
            inc = (ina * 20);
        }
        else
        {
            inc = (ina * 8);
        }
        if (cbxcoldcoffee.Checked)
        {
            ind = (inb * 10);
        }
        else
        {
            ind = (inb * 5);
        }
        txtamount.Text = (inc + ind).ToString();
    }    
}

這是一個很好的用戶友好解決方案。

我感覺到您指示為“不工作”的行不是問題,但整數分析是問題。 異常不是可以從邏輯測試中拋出的異常,而是可以從格式錯誤的整數解析中拋出的異常。 嘗試注釋掉分析行,看看是否仍然出現錯誤。

首先,您正在解析文本框的文本。 然后再次檢查它們的文本值是否為null。 這不是多余的嗎?

如果文本區域中的文本不是數字,則應該存在解析異常。 它將顯示在消息框中。 我認為您可以嘗試放置一些日志記錄語句來對已解析的整數的值進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM