c# DataGridView 加入Combobox下拉框 问题 输入数字零出错

来源:互联网 发布:java金融项目面试技巧 编辑:程序博客网 时间:2024/05/22 12:36

     datagridview加了combobox控件后 ,当输入0时,0跳到文本最前面,焦点移到了Datagridview了,处理方法

combobox加入keydown事件捕捉键盘输入0的动作,下面是代码

 

引用http://www.360doc.com/content/10/0805/11/2286640_43803573.shtml

 

      using System;
      using System.ComponentModel;
      using System.Drawing;
      using System.Windows.Forms;
      //此Form中有两个控件,一个DataGridView(dataGridView1),一个ComboBox(comboBox1)
      //DataGridView中有两列(都是DataGridViewTextBoxColumn的),其中第一列实现类似ComboBox的功能
      //第一列中只有正在编辑的Cell才会显示ComboBox,其他的不会显示,这样好看一点
      namespace Test
      {
          public partial class Form1 : Form
          {
              private int comboBoxColumnIndex = 0; // DataGridView的首列

              public Form1()
              {
                  InitializeComponent();
                  InitComboBoxValues();
                  this.dataGridView1.Controls.Add(this.comboBox1);
                  this.dataGridView1.CellEnter += new
      DataGridViewCellEventHandler(dataGridView1_CellEnter);
                  this.dataGridView1.CellLeave+=new
      DataGridViewCellEventHandler(dataGridView1_CellLeave);
              }

              private void InitComboBoxValues()
              {
                  this.comboBox1.Items.AddRange(new String[] { "Beijing",
      "Shanghai", "Guangzhou", "Wuhan", "Shenzhen" });
                  this.comboBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
      //输入提示
                  this.comboBox1.AutoCompleteSource =
      AutoCompleteSource.ListItems;
              }

              private void dataGridView1_CellEnter(object sender,
      DataGridViewCellEventArgs e)
              {
                  if (e.ColumnIndex == comboBoxColumnIndex)
                  {
                      //此处cell即CurrentCell
                      DataGridViewCell cell =
      this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
                      Rectangle rect =
      this.dataGridView1.GetCellDisplayRectangle(cell.ColumnIndex,
      cell.RowIndex, true);
                      this.comboBox1.Location = rect.Location;
                      this.comboBox1.Size = rect.Size;
                      comfirmComboBoxValue(this.comboBox1, (String)cell.Value);
                      this.comboBox1.Visible = true;            
                  }

    ///注意下面此句的变化

               comboBox1.Focus();

    //注意上面此句的变化


              }

 

//当用户在combobox1输入0时,0会跳到最前面,光标会跳到Datagridview里,似乎必须放在keydown事件,keyup不行

    private void comboBox1_KeyDown(object sender, KeyEventArgs e)
         {
            if (e.KeyCode == Keys.D0 || e.KeyCode == Keys.NumPad0))
            {
                comboBox1.Focus();
                comboBox1.SelectionStart = comboBox1.Text.Length;
            }

        }

 

              private void dataGridView1_CellLeave(object sender,
      DataGridViewCellEventArgs e)
              {
                  if (e.ColumnIndex == comboBoxColumnIndex)
                  {
                      //此处cell不为CurrentCell
                      DataGridViewCell cell =
      this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
                      cell.Value = this.comboBox1.Text;
                      this.comboBox1.Visible = false;
                  }
              }

              private void comfirmComboBoxValue(ComboBox com, String cellValue)
              {
                  com.SelectedIndex = -1;
                  if (cellValue == null)
                  {
                      com.Text = "";
                      return;
                  }
                  com.Text = cellValue;
                  foreach (Object item in com.Items)
                  {
                      if ((String)item == cellValue)
                      {
                          com.SelectedItem = item;
                      }
                  }
              }
          }
      }

原创粉丝点击