求助一个NumericUpDown的问题

yang1216 2013-09-03 08:16:18
我想在一个datagridview里面为每一条记录嵌入不同的编辑器,例如NumericUpDown,Combobox等等,差不多完成了。
但是遇到一个问题,我发现在NumericUpDown直接输入数值时只要输入0就会触发ValueChanged 事件,例如输入20就相当于2+enter。我试验了一下,如果NumericUpDown不在DataGridView里面,输入0不会触发ValueChanged 事件。
这到底是咋回事呀?
附上代码

//初始化表格
private void init()
{
SplashScreen.BeginDisplay();
myDgvNoAdjInPara.AutoGenerateColumns = false;
myDgvNoAdjInPara.Controls.Add(paraNumericUpDown);
myDgvNoAdjInPara.Controls.Add(paraComboBox);
myDgvNoAdjInPara.Controls.Add(paraRadioButton);
paraControl.Visible = false;
paraNumericUpDown.Visible = false;
paraComboBox.Visible = false;
paraRadioButton.Visible = false;
paraNumericUpDown.ValueChanged += frmTestItem_ValueChanged;
paraComboBox.SelectedIndexChanged += frmTestItem_SelectedIndexChanged;
paraRadioButton.CheckedChanged += frmTestItem_CheckedChanged;
}
//点击一个单元格,显示不同的编辑器
private void myDgvNoAdjInPara_CellClick(object sender, DataGridViewCellEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if (e.RowIndex < 0) return;
if (dgv.Rows[e.RowIndex].Cells["colId"].Value == null) return;
paraControl.Visible = false;
int id = Convert.ToInt32(dgv.Rows[e.RowIndex].Cells["colId"].Value);
Rectangle rect;
if (dgv.Columns[e.ColumnIndex].HeaderText == "参数值")
{
var itemPara = TestItemEquipIOParaService.SelectById(id);
if (itemPara == null || itemPara.ParaCode == null) return;
var equipPara = EquipParaService.SelectByCode(itemPara.ParaCode);
if (equipPara == null || equipPara.ParaValueType == null) return;
getParaControl((int)equipPara.ParaValueType, equipPara.RefValue, dgv.CurrentCell.Value.ToString());
//get the rectangle of the current cell in the datagridview
rect =
dgv.GetCellDisplayRectangle(dgv.CurrentCell.ColumnIndex, dgv.CurrentCell.RowIndex, false);
//show the control in the rectangle
paraControl.Top = rect.Top;
paraControl.Left = rect.Left;
paraControl.Height = rect.Height;
paraControl.Width = rect.Width;
paraControl.Visible = true;
}
}
//获得不同的编辑器
private void getParaControl(int paraVauleType,string refValue,string currentValue)
{
paraControl = new Control();
switch (paraVauleType)
{
case 0:
decimal inc;
decimal value;
try
{
if (string.IsNullOrEmpty(refValue)) inc = 1;
else inc = Convert.ToDecimal(refValue);
if (string.IsNullOrEmpty(currentValue)) value = 0;
else value = Convert.ToDecimal(currentValue);
paraNumericUpDown.Increment = inc;
paraNumericUpDown.Value = value;
}
catch (Exception ex)
{
log.Debug(String.Format("{0}\t{1}", ex.Source, ex.Message));
return;
}
paraControl = paraNumericUpDown;
if (paraNumericUpDown.Value!=null)
paraControl.Text = paraNumericUpDown.Value.ToString();
break;
default:
break;
}
}
//NumericUpDown值变化事件函数
private void frmTestItem_ValueChanged(object sender, EventArgs e)
{
if (paraControl is NumericUpDown)
myDgvNoAdjInPara.CurrentCell.Value = ((NumericUpDown)paraControl).Value;
}

...全文
89 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang1216 2013-09-06
  • 打赏
  • 举报
回复
自己再顶一次
yang1216 2013-09-05
  • 打赏
  • 举报
回复
自己顶一次。
yang1216 2013-09-04
  • 打赏
  • 举报
回复
这个没人会吗?还是没人遇到过?

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧