'セルの値を取得 Dim val As String = r.Cells(\ If Not String.IsNullOrEmpty(val) AndAlso _ Not Me.autoCompleteSource.Contains(val) Then 'オートコンプリートのリストに追加 autoCompleteSource.Add(val) End If Next r End Sub
'CellValueChangedイベントハンドラ
Private Sub DataGridView1_CellValueChanged(ByVal sender As Object, _ ByVal e As DataGridViewCellEventArgs) _ Handles DataGridView1.CellValueChanged
Dim dgv As DataGridView = CType(sender, DataGridView) '該当する列か調べる If dgv.Columns(e.ColumnIndex).Name = \Then 'セルの値を取得 Dim val As String = dgv(e.ColumnIndex, e.RowIndex).Value If Not String.IsNullOrEmpty(val) AndAlso _ Not Me.autoCompleteSource.Contains(val) Then 'オートコンプリートのリストに追加 autoCompleteSource.Add(val) End If End If End Sub [C#]
AutoCompleteStringCollection autoCompleteSource = new AutoCompleteStringCollection(); //EditingControlShowingイベントハンドラ
private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) {
DataGridView dgv = (DataGridView)sender; if (e.Control is TextBox) {
//編集のために表示されているテキストボックスを取得 TextBox tb = (TextBox)e.Control; //該当する列か調べる if (dgv.CurrentCell.OwningColumn.Name == \ {
//オートコンプリートを有効にする tb.AutoCompleteMode = AutoCompleteMode.SuggestAppend; tb.AutoCompleteSource = AutoCompleteSource.CustomSource; tb.AutoCompleteCustomSource = this.autoCompleteSource; } else {
//オートコンプリートを無効にする tb.AutoCompleteMode = AutoCompleteMode.None; }
} }
//DataSourceChangedイベントハンドラ
private void DataGridView1_DataSourceChanged(object sender, EventArgs e) {
DataGridView dgv = (DataGridView)sender; //オートコンプリートのリストを初期化 this.autoCompleteSource.Clear();
//DataGridView内のデータをリストに追加 foreach (DataGridViewRow r in dgv.Rows) {
//セルの値を取得 string val = r.Cells[\as string; if (!string.IsNullOrEmpty(val) &&
!this.autoCompleteSource.Contains(val)) {
//オートコンプリートのリストに追加 autoCompleteSource.Add(val); } } }
//CellValueChangedイベントハンドラ
private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
DataGridView dgv = (DataGridView)sender; //該当する列か調べる if (dgv.Columns[e.ColumnIndex].Name == \ {
//セルの値を取得 string val = dgv[e.ColumnIndex, e.RowIndex].Value as string; if (!string.IsNullOrEmpty(val) &&
!this.autoCompleteSource.Contains(val)) {
//オートコンプリートのリストに追加 autoCompleteSource.Add(val); } } }
53. DataGridView单元格编辑时键盘KEY事件取得 [VB.NET]
'EditingControlShowingイベントハンドラ
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _ ByVal e As DataGridViewEditingControlShowingEventArgs) _ Handles DataGridView1.EditingControlShowing
'表示されているコントロールがDataGridViewTextBoxEditingControlか調べる If TypeOf e.Control Is DataGridViewTextBoxEditingControl Then Dim dgv As DataGridView = CType(sender, DataGridView) '編集のために表示されているコントロールを取得 Dim tb As DataGridViewTextBoxEditingControl = _
CType(e.Control, DataGridViewTextBoxEditingControl) 'イベントハンドラを削除 RemoveHandler tb.KeyPress, AddressOf dataGridViewTextBox_KeyPress '該当する列か調べる If dgv.CurrentCell.OwningColumn.Name = \Then 'KeyPressイベントハンドラを追加 AddHandler tb.KeyPress, AddressOf dataGridViewTextBox_KeyPress End If End If End Sub
'DataGridViewに表示されているテキストボックスのKeyPressイベントハンドラ Private Sub dataGridViewTextBox_KeyPress(ByVal sender As Object, _ ByVal e As KeyPressEventArgs) _ Handles DataGridView1.KeyPress '数字しか入力できないようにする
If e.KeyChar < \ e.Handled = True End If End Sub [C#]
//EditingControlShowingイベントハンドラ
private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) {
//表示されているコントロールがDataGridViewTextBoxEditingControlか調べる if (e.Control is DataGridViewTextBoxEditingControl) {
DataGridView dgv = (DataGridView)sender;
//編集のために表示されているコントロールを取得 DataGridViewTextBoxEditingControl tb =
(DataGridViewTextBoxEditingControl)e.Control; //イベントハンドラを削除 tb.KeyPress -= new KeyPressEventHandler(dataGridViewTextBox_KeyPress); //該当する列か調べる if (dgv.CurrentCell.OwningColumn.Name == \ {
//KeyPressイベントハンドラを追加 tb.KeyPress += new KeyPressEventHandler(dataGridViewTextBox_KeyPress); } } }
//DataGridViewに表示されているテキストボックスのKeyPressイベントハンドラ private void dataGridViewTextBox_KeyPress(object sender, KeyPressEventArgs e) {
//数字しか入力できないようにする if (e.KeyChar < '0' || e.KeyChar > '9') {
e.Handled = true; } }
54. DataGridView下拉框(ComboBox)单元格编辑时事件取得 [VB.NET]
Private dataGridViewComboBox As DataGridViewComboBoxEditingControl = Nothing 'EditingControlShowingイベントハンドラ
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _ ByVal e As DataGridViewEditingControlShowingEventArgs) _ Handles DataGridView1.EditingControlShowing
'表示されているコントロールがDataGridViewComboBoxEditingControlか調べる If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then Dim dgv As DataGridView = CType(sender, DataGridView) '該当する列か調べる If dgv.CurrentCell.OwningColumn.Name = \Then '編集のために表示されているコントロールを取得 Me.dataGridViewComboBox = _ CType(e.Control, DataGridViewComboBoxEditingControl) 'SelectedIndexChangedイベントハンドラを追加 AddHandler Me.dataGridViewComboBox.SelectedIndexChanged, _ AddressOf dataGridViewComboBox_SelectedIndexChanged End If End If End Sub
'CellEndEditイベントハンドラ
Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, _ ByVal e As DataGridViewCellEventArgs) _ Handles DataGridView1.CellEndEdit
'SelectedIndexChangedイベントハンドラを削除 If Not (Me.dataGridViewComboBox Is Nothing) Then RemoveHandler Me.dataGridViewComboBox.SelectedIndexChanged, _ AddressOf dataGridViewComboBox_SelectedIndexChanged Me.dataGridViewComboBox = Nothing End If End Sub
'DataGridViewに表示されているコンボボックスの 'SelectedIndexChangedイベントハンドラ
Private Sub dataGridViewComboBox_SelectedIndexChanged(ByVal sender As Object,ByVal e As EventArgs) '選択されたアイテムを表示
Dim cb As DataGridViewComboBoxEditingControl = _ CType(sender, DataGridViewComboBoxEditingControl) Console.WriteLine(cb.SelectedItem) End Sub [C#]
private DataGridViewComboBoxEditingControl dataGridViewComboBox = null; //EditingControlShowingイベントハンドラ
private void DataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) {
//表示されているコントロールがDataGridViewComboBoxEditingControlか調べる
if (e.Control is DataGridViewComboBoxEditingControl) {
DataGridView dgv = (DataGridView)sender; //該当する列か調べる if (dgv.CurrentCell.OwningColumn.Name == \ {
//編集のために表示されているコントロールを取得 this.dataGridViewComboBox =
(DataGridViewComboBoxEditingControl)e.Control; //SelectedIndexChangedイベントハンドラを追加 this.dataGridViewComboBox.SelectedIndexChanged += new EventHandler(dataGridViewComboBox_SelectedIndexChanged); } } }
//CellEndEditイベントハンドラ
private void DataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
//SelectedIndexChangedイベントハンドラを削除 if (this.dataGridViewComboBox != null) {
this.dataGridViewComboBox.SelectedIndexChanged -= new EventHandler(dataGridViewComboBox_SelectedIndexChanged); this.dataGridViewComboBox = null; } }
//DataGridViewに表示されているコンボボックスの //SelectedIndexChangedイベントハンドラ
private void dataGridViewComboBox_SelectedIndexChanged(object sender, EventArgs e) {
//選択されたアイテムを表示
DataGridViewComboBoxEditingControl cb =
(DataGridViewComboBoxEditingControl)sender; Console.WriteLine(cb.SelectedItem); }
55. DataGridView下拉框(ComboBox)单元格允许文字输入设定 [VB.NET]
'EditingControlShowingイベントハンドラ
Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, _ ByVal e As DataGridViewEditingControlShowingEventArgs) _ Handles DataGridView1.EditingControlShowing If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then '該当する列か調べる Dim dgv As DataGridView = CType(sender, DataGridView) If dgv.CurrentCell.OwningColumn.Name = \Then '編集のために表示されているコントロールを取得 Dim cb As DataGridViewComboBoxEditingControl = _ CType(e.Control, DataGridViewComboBoxEditingControl)