2

すべて、

WinFormsアプリケーションにDataGridViewコントロールがあり、selectionプロパティが "Entire Row"であり、複数選択はありません。また、SelectionChangedデリゲートをアタッチします。ここで、現在選択されている行を取得する必要があります。

    private void order_SelectionChanged(object sender, EventArgs e)
    {
        ordersItemIndex = order.SelectedRows[0].Index;
    }

問題は、プログラムの起動時に選択がまったく行われないはずであり、後でユーザーだけがマウスまたはキーボードで選択を変更できることです。したがって、Form_Load()イベントには、次のものがあります。

   order.ClearSelection();

ただし、このコードパスは、プログラムの起動時に例外をスローします。

追加の変数なしで、「フォームをロードしています。デリゲートを呼び出さないでください」とプログラムに伝える良い方法はありますか?

ありがとうございました。

4

1 に答える 1

4

Form_Load()(ではなくInitializeComponents())で選択をクリアした後、 order_SelectionChanged を追加できます

ただし、選択した行があるかどうかをハンドラーで確認することをお勧めします。

private void order_SelectionChanged(object sender, EventArgs e)
{
    if (order.SelectedRows.Count > 0)
      ordersItemIndex = order.SelectedRows[0].Index;
}
于 2012-08-27T08:07:35.587 に答える