6

DataTableからデータを取得するDataGridViewを使用して、ある程度のデータを編集します。すべて問題ないようですが、不便があります。ユーザーがセルの編集を開始すると、このセルのテキストが自動的に選択され、カーソルがセルテキストの最後に移動します。ユーザーがセルテキストの編集を開始したときに、プログラムでセルを編集する際にカーソル(キャレット)をテキストの先頭に置きたい。私は試した:

private void gridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        DataGridViewTextBoxEditingControl dText = (DataGridViewTextBoxEditingControl)e.Control;
        dText.Select(0, 0);
    }

それはうまくいきません。また、CellBeginEditでテキストの選択を解除しようとしましたが、結果はありませんでした。

4

1 に答える 1

10

私はあなたが仕事をするために何をしたかを期待していたでしょう。ただし、DataGridViewは多くのイベントを含む複雑なコントロールであり、直感的に機能しないことがよくあります。イベントが発生したときEditingControlShowing、コントロールはまだ初期化されていないようですので、影響を与えることはできません。そして、CellBeginEditイベントが発生したとき、コントロールはまだ作成されていません。

あるべきであり、おそらくそれを行うためのより良い方法がありますが、私はCellEnterイベントを使用してそれを機能させることができました:

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
{
    if (dgv.CurrentCell.EditType == typeof(DataGridViewTextBoxEditingControl))
    {
        dgv.BeginEdit(false);            
        ((TextBox)dgv.EditingControl).SelectionStart = 0;
    }
}

したがって、セルに入ると、編集モードに直接入りますが、falseを渡すBeginEdit()と、テキストを選択しないように指示されます。これで、編集コントロールが完全に初期化さSelectionStartれ、ゼロに設定してカーソルをテキストの先頭に移動できます。

セルがテキストボックスでない場合、私は何もしません。

あなたが望むならあなたはすることができます

dgv.EditMode = DataGridViewEditMode.EditProgrammatically;

編集をいつ開始するかを完全に制御できるようにしますが、これは必要ではないと思います。

于 2011-12-14T23:52:53.393 に答える