【发布时间】:2015-05-10 05:48:11
【问题描述】:
我认为这是我正在尝试解决的 .NET(4.0 和 4.5)中的一个错误。我创建了一个小样本,应该可以重现此问题。
- 点击按钮
- 编辑单元格(删除 dgv 之前的 a1 或 a2)
- 等待数据更改为 b1 和 b2。
- 然后尝试关闭表单。
我想我可以通过简单地取消对当前单元格的编辑来解决这个问题,但是表单仍然无法关闭。出于某种原因,e.Cancel 为 true。
class DForm : Form {
Button btn = new Button { Text = "Test", Dock = DockStyle.Top };
DataGridView dgv = new DataGridView { Dock = DockStyle.Fill };
public DForm() {
DataTable table = new DataTable();
table.Columns.Add("Field1");
table.Columns.Add("Field2");
table.Rows.Add("a1", "a2");
dgv.DataSource = table;
Controls.Add(btn);
Controls.Add(dgv);
btn.Click += delegate {
MessageBox.Show("Now edit a cell. After the dgv is swapped, try to close the form.");
DataGridView dgv2 = new DataGridView() { Dock = DockStyle.Fill };
DataTable table2 = new DataTable();
table2.Columns.Add("Field1b");
table2.Columns.Add("Field2b");
table2.Rows.Add("b1", "b2");
dgv2.DataSource = table2;
Thread t = new Thread(o => {
Thread.Sleep(2000);
Control c = (Control) o;
c.BeginInvoke((Action) delegate {
if (dgv.IsCurrentCellInEditMode)
dgv.CancelEdit();
this.Controls.Remove(dgv);
dgv.Dispose();
this.Controls.Add(dgv2);
});
});
t.IsBackground = true;
t.Start(this);
};
}
protected override void OnFormClosing(FormClosingEventArgs e) {
if (e.Cancel) {
MessageBox.Show("why???");
return;
}
base.OnFormClosing(e);
}
}
【问题讨论】:
-
你有没有尝试调用 table.EndEdit()
标签: c# .net multithreading winforms datagridview