转载地址:https://q.cnblogs.com/q/38294/
.net中DataGridView控件中,想实现与textchanged一样 的功能。DataGridView控件某列的单元格内 每输入一个字就自动触发一次事件。本来用CellValueChanged方法试过,但这方法必修要焦点离开单元格后才能触发事件。我的目的是,在键盘输入字符的过程中触发事件,可是试过很多方法都无法实现目的。。希望有经验的高手能提点一下。。哪怕能实现在输入字符后再按某个键进行触发事件也可以,只要焦点不离开正在编辑的单元格就行。。例如:我要在某列某单元格输入字符串“ABCD”,当输入A时触发一次事件,输入B时也触发一次事件,如此类推
改一下:
public frmDepositEdit()
{
InitializeComponent();
dgvCardType.AutoGenerateColumns = false;
//======事件绑定=======
dgvCardType.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgvCardType_EditingControlShowing);
}
void dgvCardType_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
//KeyPress事件绑定
e.Control.KeyPress += new KeyPressEventHandler(Control_KeyPress);
}
//求实收金额。
decimal addMoney = 0;
void Control_KeyPress(object sender, KeyPressEventArgs e)
{
//要处理的事件信息。
decimal intNumberBoxes = 0;
decimal someAmount = 0;
if (char.IsNumber(e.KeyChar))
{
int column = dgvCardType.CurrentCellAddress.X;
int row = dgvCardType.CurrentCellAddress.Y;
if (column == 2)
{
string cellValue = Char.ToString(e.KeyChar);
string test = dgvCardType[column, row].EditedFormattedValue.ToString();
test = test + cellValue;
intNumberBoxes = Convert.ToDecimal(test);
if (intNumberBoxes > 999)
{
e.Handled = true;
}
someAmount = decimal.Parse(dgvCardType.Rows[dgvCardType.CurrentCellAddress.Y].Cells[1].Value.ToString());
txt_现金金额.Text = (addMoney + intNumberBoxes * someAmount).ToString();
}
}
}