0

以下のコードでは、RowsAdded の終了前に SelectionChanged イベントが発生していますが、イベントをアトミックにするにはどうすればよいですか?

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
    {
        dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[1];
        dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[1].Selected = true;
    }

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        if (dataGridView1.CurrentRow != null)
        {
            //Something
        }
    }

私は何をすべきか?

4

2 に答える 2

2

SelectionChangedRowsAddedの現在のセルを変更して SelectionChanged を引き起こしているため、処理の途中で発生します。行を追加しても、両方のイベントが発生するわけではありません。最初のイベントの処理中に 2 番目のイベントが発生します。(実際には、ハンドラーの両方の行が選択を変更しているように見えるため、おそらく 2 回発生している可能性があります)。 dataGridView1_RowsAddedSelectionChanged

dataGridView1_SelectionChangedRowsAdded ハンドラーで実行したくない場合は、イベントから一時的にサブスクライブを解除する必要があります。

dataGridView1.SelectionChanged -= dataGridView1_SelectionChanged;
// change the selection... 
dataGridView1.SelectionChanged += dataGridView1_SelectionChanged;

または、SelectionChanged ハンドラー内で行っていることを再設計して、イベントのすべてのインスタンスに適したものにします。

于 2012-06-30T08:09:00.753 に答える
0

制御したいイベントをオーバーライドしてから、オーバーライドされたイベントに if 条件を入れて、いつ起動し、いつ起動しないかを制御できます。マフディ

于 2012-06-30T07:39:37.513 に答える