2

まだロードされていない値を含むリスト ボックスをロードする次のメソッドを作成しましたが、以下を割り当てるときにオブジェクト例外のインスタンスに設定されていないオブジェクト参照を取得しています。どんな情報でも役に立ちます。ありがとう。

lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i].ToString());

// Defined outside a method
List<string> cabinetsCurrentNotUsed; 

// Set value in the constructor
cabinetsCurrentNotUsed = new List<string>();

これが全体の手順です。

    private void selectCabinetToAdd()
    {

        // Loop through all server and form cabinet types to see if there are matches
        for (int x = 0; x < opticalFile.serverCabinetNames.Count; x++)
        {
            bool cabinetExists = false;
            for (int i = 0; i < opticalFile.CabinetValues.Count; i++)
            {
                if (opticalFile.serverCabinetNames[x].ToString() == opticalFile.CabinetValues[i].ToString())
                {
                    cabinetExists = true;
                }
            }
            // Add cabinets not used to cabinetsCurrentNotUsed List
            if (!cabinetExists)
            {
                cabinetsCurrentNotUsed.Add(opticalFile.serverCabinetNames[x].ToString());
            }
        }

        // Send cabinetsCurrentNotUsed List to list box
        for (int i = 0; i < cabinetsCurrentNotUsed.Count; i++)
        {
            lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i].ToString());
        }
    }
4

2 に答える 2

2

リストボックスに null を追加しようとしています。

の代わりに

for (int i = 0; i < cabinetsCurrentNotUsed.Count; i++)
{
     lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i].ToString());
}

使用する

foreach (string s in cabinetsCurrentNotUsed)
{
    if(s != null)
          lbxCabinetName.Items.Add(s);
}

ノート

この部分は質問と関係ありません。ただし、設定後の内側の for ループでcabinetExists = true;は、内側のループから抜け出すことができます (少なくとも 1 つの条件が満たされている場合は、cabinetExists が true であることを確認できます。内側のループの残りの項目を確認する必要はありません)。

編集

private void selectCabinetToAdd()
{
        foreach (string sc in serverCabinetNames)
        {
            bool cabinetExists = false;
            foreach (string cv in CabinetValues)
            {
                if (sc == cv)
                {
                    cabinetExists = true;
                    break;
                }                    
            }

            if (!cabinetExists)
            {
                cabinetsCurrentNotUsed.Add(sc);
            }

        }

        foreach (string ccnu in cabinetsCurrentNotUsed)
        {
            if (ccnu != null)
                lbxCabinetName.Items.Add(ccnu);
        }
   }

また、listBox が null になる可能性がある場合は、リストボックスにデータを入力する前にまずそれを確認してください。

if(lbxCabinetName != null)
{
    selectCabinetToAdd();
}

編集2

コントロールを動的に追加する

ListBox lbxCabinetName = new ListBox();
lbxCabinetName.Location = new System.Drawing.Point(10, 55);
lbxCabinetName.Size = new System.Drawing.Size(130, 95);
this.Controls.Add(lbxCabinetName);
于 2012-05-22T04:46:06.777 に答える
0

文字列はヌル可能であるため、ある時点で次のようなことをしている必要があります。

cabinetsCurrentNotUsed.Add(null);

それか、dbasemanが可能だと言ったようlbxCabinetNameにnullですが、そうではないに違いありません。

余談ですが、これは実際には問題ではありませんが、文字列の一般的なリストを使用している場合、ToString()呼び出しは必要ありません。これを行うことができます:

lbxCabinetName.Items.Add(cabinetsCurrentNotUsed[i]);
于 2012-05-22T04:17:30.257 に答える