2

2つのフォームを設定しています。最初の形式では、次のコードがあります。

frm_BL addBranch = new frm_BL();

do
{
    addBranch.ShowDialog();
    if (addBranch.txtAmount.Text == "")
    {
        break;
    }

} while (true);

メインフォームで。そして、これは2番目の形式です。

private void btnAccept_Click(object sender, EventArgs e)
{
    this.Close();
}

ただし、メインフォームのコードを次のように変更すると、次のようになります。

 if (addBranch.txtAmount.Text == null) //changed to null

2番目のフォームはポップアップし続けます。しかし、それがとどまるなら

if (addBranch.txtAmount.Text == "") 

フォームを閉じます。誰かがそれがなぜであるか説明できますか?

4

6 に答える 6

5

nullと空の文字列は2つの異なるものです。両方のケースを処理する場合は、代わりにString.IsNullOrEmptyを使用できます。

nullは、あなたが持っている文字列への参照が存在しないことを意味します(あなたは何も指さない)

空の文字列は、何も含まない文字列への参照があることを意味します(たとえば、空の文字配列へのポインタ)。

于 2012-04-04T04:43:02.197 に答える
5

これを行うための最良の方法は次のとおりです。

if (String.IsNullOrEmpty(addBranch.txtAmount.Text))

txtAmount.Textプロパティは、テキストボックスのstringコンテンツを含みます。テキストボックスが空の場合は、長さがゼロの文字列です。

との同等性をチェックすることnullは、「テキストボックスに文字列がない場合...」と言っていることです。これは常にfalseになります。チェックする正しい条件は、「テキストボックスの文字列が空の場合...」です。

メソッドを使用するIsNullOrEmptyと、両方の条件がチェックされます。この場合、文字列がnullになることはありませんが、チェックしても問題ありません。

これ""は空の文字列(と同等String.Empty)であるのに対しnull、文字列は存在しないことに注意してください。

于 2012-04-04T04:47:57.297 に答える
2

Anull Stringは空とは異なりますStringString.Empty()代わりに使用してください。

于 2012-04-04T04:42:49.733 に答える
0

すでに正しい答えに加えて、チェックにTrim()も追加します。ほとんどの場合、空白のみの文字列は、特にTextBox入力で受け入れられるものではないためです。

if (string.IsNullOrEmpty(addBranch.txtAmount.Text.Trim())) 
于 2012-04-04T06:47:21.030 に答える
0

詳細については、定義を確認します。

nullキーワードは、オブジェクトを参照しないnull参照を表すリテラルです。nullは、参照型変数のデフォルト値です。通常の値型をnullにすることはできません。ただし、C#2.0ではnull許容値型が導入されました。

http://msdn.microsoft.com/en-us/library/edakx9da.aspx

このフィールド(String.Empty)の値は、長さがゼロの文字列""です。アプリケーションコードでは、このフィールドは、文字列変数を空の文字列に初期化するための割り当てで最も一般的に使用されます。

http://msdn.microsoft.com/en-us/library/system.string.empty.aspx

もう1つ、「文字列の値がNothingまたはString.Emptyであるかどうかをテストするには、IsNullOrEmptyメソッドを使用する」ということがわかります。

したがって、何かがnull何もない場合(最も一般的には0を参照)を表しますが、文字列にnull値が含まれている場合、これは文字列が空であるが有効なメモリへの参照を保持していることを意味します。

于 2012-04-04T04:49:54.457 に答える
0

txtAmount.Textは、コードを記述したときにnullを返すことはありません(c#で、有効な(null以外の)TextBoxごとに)。

TextBox.Text空の文字列または空でない文字列のいずれかである文字列を返します。

于 2012-04-04T06:18:21.783 に答える