1

私は、トリップのグループから選択してデータを取得し、見つかったすべてのアイテムをそのトリップの一部としてリストボックスに入力できるプログラムを構築しています。リストボックスからアイテムを選択すると、各フィールドを編集できる一連のテキストボックスにデータが入力されます。

問題のコードはフォーム内にあります (tripChoose はコンボ ボックスで、listExpenses はリスト ボックスです)。

private void tripChoose_SelectedIndexChanged(object sender, EventArgs e)
{
    IEnumerable<TripExpense> selectedExpenses = roster.ToFind((string)tripChoose.SelectedItem);
    foreach (TripExpense item in selectedExpenses)
        listExpenses.Items.Add(item);
}

private void listExpenses_SelectedIndexChanged(object sender, EventArgs e)
{
    specificExpenses = (TripExpense)roster.TripFind((string)listExpenses.SelectedItem);
    tripTextBox.Text = specificExpenses.Trip;
    tripTextBox.Enabled = false;
    descriptionTextBox.Text = specificExpenses.Description;
    amountTextBox.Text = specificExpenses.Amount.ToString();
    paymentMethodTextBox.Text = specificExpenses.PaymentMethod;
    dateExpenseTimePicker.Value = specificExpenses.Date;
    dateExpenseTimePicker.Enabled = true;
    noteTextBox.Text = specificExpenses.Note;
}

JIT デバッガーは、オブジェクトを文字列に暗黙的に変換していることを知らせてくれます

次のような ToString メソッドを使用してみました。

private void tripChoose_SelectedIndexChanged(object sender, EventArgs e)
{
    IEnumerable<TripExpense> selectedExpenses = roster.ToFind((string)tripChoose.SelectedItem);
    foreach (TripExpense item in selectedExpenses)
    listExpenses.Items.Add(item.ToString());
}

オブジェクト参照がオブジェクトのインスタンスに設定されていないというエラーが表示されるので、私は正しい方向に進んでいると思います。

4

1 に答える 1

1

問題は でのToString()メソッドの実装だと思いますTripExpense。その中から文字列を使用してにフィードすると、FindTripそれはもう見つかりません。

代わりにできることは、コンボアイテムの元の設定を持ち、SelectedIndexChanged代わりに変更することです

private void tripChoose_SelectedIndexChanged(object sender, EventArgs e)
{
    IEnumerable<TripExpense> selectedExpenses = roster.ToFind((string)tripChoose.SelectedItem);
    foreach (TripExpense item in selectedExpenses)
        listExpenses.Items.Add(item);
}

private void listExpenses_SelectedIndexChanged(object sender, EventArgs e)
{
    specificExpenses = (TripExpense)listExpenses.SelectedItem;
    ... 
}

このように、ComboBox テキストは引き続きオブジェクトの を取得しますがToString()、オブジェクトを再クエリしようとするのではなくTripExpense、 から実際のオブジェクトを取得して再生することができます。SelectedItem

于 2012-04-24T03:09:55.890 に答える