注意, 我做的是一个类似于NumericUpdown的东西——NoLimitNumericUpDown.
这个控件是一个UserControl. 除了底板(就是什么也不放时候的背景)以外有一个UpDown用户控件和一个Textbox控件.UpDown控件包括两个按钮, 一个显示上一个显示下(就像是电梯的一对上下按钮). IDataGridViewEditingControl 已经完整实现. 现在的问题是, 它无法响应焦点离开后自动提交的功能. 就是说如果把这个NoLimitNumericUpDown中的文本框的文字改变, 那么则无法响应消失焦点自动提交的功能. 甚至整个窗体的鼠标按键都无效了. 我打断点看了一下, TextBox 在有焦点的情况下会夺去其父控件的焦点.
但是ESC却可以正常响应.
我看了一下网上的例子, 没有人曾经试过像我这样使用嵌套UserControl来做DataGridViewCellControl的.
DataGirdView.EditEnd、CellClick等等都试过. 在NoLimitNumericUpDown的TextBox值被改以后这些事件不被触发.各位大侠说一下, 怎么办才能实现焦点脱离自动提交的功能! 不胜感激!
这个控件是一个UserControl. 除了底板(就是什么也不放时候的背景)以外有一个UpDown用户控件和一个Textbox控件.UpDown控件包括两个按钮, 一个显示上一个显示下(就像是电梯的一对上下按钮). IDataGridViewEditingControl 已经完整实现. 现在的问题是, 它无法响应焦点离开后自动提交的功能. 就是说如果把这个NoLimitNumericUpDown中的文本框的文字改变, 那么则无法响应消失焦点自动提交的功能. 甚至整个窗体的鼠标按键都无效了. 我打断点看了一下, TextBox 在有焦点的情况下会夺去其父控件的焦点.
但是ESC却可以正常响应.
我看了一下网上的例子, 没有人曾经试过像我这样使用嵌套UserControl来做DataGridViewCellControl的.
DataGirdView.EditEnd、CellClick等等都试过. 在NoLimitNumericUpDown的TextBox值被改以后这些事件不被触发.各位大侠说一下, 怎么办才能实现焦点脱离自动提交的功能! 不胜感激!
{
int value; public NoLimitNumericUpDownControl()
{
InitializeComponent();
this.textBox1.TextChanged += new EventHandler(textBox1_TextChanged);
} void textBox1_TextChanged(object sender, EventArgs e)
{
if (int.TryParse(textBox1.Text, out this.value))
{
this.EditingControlValueChanged = true;
this.EditingControlDataGridView.NotifyCurrentCellDirty(true); //<----
}
}
//...
}
好想法,通过能获得焦点的textbox的事件来通知主体的datagridview
发生这种灵异事件的原因就是因为DataGridView不支持带有嵌套控件的DataGridViewCell.
自己用GDI+画吧!