dataGrid1.Controls.Add(comboBox1);
原本设想当光标移到表格的第二列时显示下拉复合框,以方便输入,可实际是表格的CurrentCell位于comboBox1上,于是我将comboBox1的width增大,使得comboBox1的下拉箭头从右边露了出来,可这样不美观,comboBox1的宽度挤到第三列上去了,有什么办法使得comboBox1在表格的文本单元格上面?
根据程序运行的特点,我猜想是因为表格单元格获得焦点而盖住了comboBox1,于是我在CurrentCellChanged事件中加了两行代码,结果OK了,与大家分享一下。
private void dataGrid1_CurrentCellChanged(object sender, System.EventArgs e)
{
if (dataGrid1.CurrentCell.ColumnNumber == 1)
{
Rectangle rect = dataGrid1.GetCellBounds(dataGrid1.CurrentCell);
comboBox1.SetBounds(rect.Left,rect.Top,rect.Width,rect.Height);
button1.Focus(); //焦点撤离表格,下行代码使comboBox1显示出来。
comboBox1.Visible = true;
dataGrid1.Focus(); //焦点又回到表格,但焦点去来之后,当前单元格没有变化,只是没了输入光标,因此comboBox1就显示出来了。先前我单击第二列的某个单元格,由于鼠标单击使当前单元格获得了输入光标,因此comboBox1不能正常显示了。
string str = dataGrid1[dataGrid1.CurrentCell.RowNumber,
dataGrid1.CurrentCell.ColumnNumber].ToString()
for (int i = 0; i < comboBox1.Items.Count; i ++)
{
if (comboBox1.Items[i].ToString() == str)
{
comboBox1.SelectedIndex = i;
break;
}
}
}
else
{
comboBox1.Visible = false;
}
}