1

それによってホストされるコントロールとしてテキストボックスを備えたdatagridviewcellがあります。では、コードの他の部分でプログラムによって制御のタイプを取得するにはどうすればよいですか?

次のように列を追加します。

DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.ReadOnly = false;
col.Name = "Status";
col.HeaderText = "Status";
dgv.Columns.Add(col);

その列のすべてのセルにテキストボックスが表示されます。次のようなテキストボックスとしてコントロールを取得できます。

private void dgv_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    if (dgv.CurrentCell.ColumnIndex == 5 && e.Control is TextBox)
    {
         //something
    }
}

他の場所のセルでホストされているタイプのコントロールを取得するにはどうすればよいですか?コードの他の部分から取得e.Controlして、次のようなことができるようにする方法:

((TextBox)dgv[i, j].EditinControl).AutoCompleteSource = AutoCompleteSource.CustomSource;
((TextBox)dgv[i, j].EditinControl).AutoCompleteCustomSource = someSource;
((TextBox)dgv[i, j].EditinControl).AutoCompleteMode = AutoCompleteMode.SuggestAppend;

など。上記の行で何を置き換えることができEditinControlますか..??

4

1 に答える 1

10

セルが編集モードでない限り、セルの編集コントロールにアクセスできるとは思いません。セルには編集モードに入るまで編集コントロールがないと思います。これがおそらくセルにEditingControlプロパティがない理由ですが、DataGridViewは1つあります。

セルのプロパティを使用してセルの編集コントロールのタイプを取得でき、プロパティを使用しEditTypeて現在の編集コントロールを取得できDataGridView.EditingControlます。

if (dgv.CurrentCell.EditType == typeof(DataGridViewTextBoxEditingControl))     
{         
    ((TextBox)dgv.EditingControl).AutoCompleteSource =
        AutoCompleteSource.CustomSource; 
}
于 2012-01-05T22:58:33.177 に答える