Run code, press down arrow, up arrow, down arrow.
Exception occurs in Application.Run() line. How to fix ?
Andrus.
using System;
using System.Windows.Forms;
using System.ComponentModel;
class Supplier {
public string Id { get; set; }
}
class Form1 : Form {
[STAThread]
static void Main() {
Application.Run(new Form1());
}
public Form1() {
DataGridView grid = new DataGridView();
// if this line is commented out, all is OK:
grid.EditMode = DataGridViewEditMode.EditOnEnter;
ComboBoxColumn comboBoxColumn = new ComboBoxColumn();
ComboBoxCell ComboBoxCell = new ComboBoxCell();
comboBoxColumn.CellTemplate = ComboBoxCell;
grid.Columns.Add(comboBoxColumn);
BindingList<Supplier> l = new BindingList<Supplier>();
l.Add(new Supplier());
grid.DataSource = l;
Controls.Add(grid);
}
class ComboBoxColumn : DataGridViewComboBoxColumn { }
class ComboBoxCell : DataGridViewComboBoxCell {
public override Type EditType {
get {
return typeof(ComboBoxEditingControl);
}
}
}
class ComboBoxEditingControl : ComboBox, IDataGridViewEditingControl {
protected int rowIndex;
protected DataGridView dataGridView;
protected bool valueChanged = false;
protected override void OnTextChanged(EventArgs e) {
base.OnTextChanged(e);
NotifyDataGridViewOfValueChange();
}
protected virtual void NotifyDataGridViewOfValueChange() {
valueChanged = true;
if (dataGridView != null) {
dataGridView.NotifyCurrentCellDirty(true);
}
}
public Cursor EditingPanelCursor {
get {
return Cursors.IBeam;
}
}
public DataGridView EditingControlDataGridView {
get {
return dataGridView;
}
set {
dataGridView = value;
}
}
public object EditingControlFormattedValue {
set {
if (value.ToString() != Text) {
Text = value.ToString();
NotifyDataGridViewOfValueChange();
}
}
get {
return Text;
}
}
public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts
context) {
return Text;
}
public void PrepareEditingControlForEdit(bool selectAll) { }
public bool RepositionEditingControlOnValueChange {
get {
return false;
}
}
public int EditingControlRowIndex {
get {
return rowIndex;
}
set {
rowIndex = value;
}
}
public void ApplyCellStyleToEditingControl(DataGridViewCellStyle
dataGridViewCellStyle) {
DropDownStyle = ComboBoxStyle.DropDown;
}
public bool EditingControlWantsInputKey(Keys keyData, bool
dataGridViewWantsInputKey) {
return !dataGridViewWantsInputKey;
}
public bool EditingControlValueChanged {
get {
return valueChanged;
}
set {
valueChanged = value;
}
}
}
}