【问题标题】:Datagridview event for enter key输入键的 Datagridview 事件
【发布时间】:2023-03-11 22:23:01
【问题描述】:

我有一个绑定的 datagridview。当我在 datagridview 中选择一个单元格并按 Enter 键时,我希望引发一个事件,它将所选单元格的行的第一列值传递给另一个表单。怎么办?

【问题讨论】:

  • 你尝试了什么?这是winforms吗?你如何绑定数据?你能显示一些代码吗?
  • 您可以订阅单元格的按键事件,然后在找到 Enter 键时进行操作。

标签: c# winforms


【解决方案1】:

我通过使用_EditingControlShowing Event 到 datagridview 并使用 PreviewKeyDown 到这里的单元格代码解决了这个问题:

DataGridView1.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler (DataGridView1_EditingControlShowing);

private void dbg_EditingControlShowing (object sender, DataGridViewEditingControlShowingEventArgs e) {
        TextBox txb = e.Control as TextBox;
        txb.PreviewKeyDown += (S, E) => {
            if (E.KeyCode == Keys.Enter) {
                DataGridView1.CurrentCell = dbg.CurrentRow.Cells["Column_name"];
                //Or any code you ...
            }
        };
}

【讨论】:

    【解决方案2】:
    void TextBox1_KeyDown(object sender, KeyEventArgs e)
    { 
        if (e.KeyCode == Keys.Enter) 
        { 
            e.Handled = true; 
        } 
    }
    
    void TextBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
    { 
        if (e.KeyCode == Keys.Return)
        {
            /* Your code here! */ 
        }
    }
    

    【讨论】:

      【解决方案3】:

      假设这是针对 Winforms,您可以订阅其中一个 Key 事件并使用该事件。

      例如,这里使用KeyUp 事件。

       private void myDataGridView_KeyUp(object sender, KeyEventArgs e)
       {
            // nothing is selected
            if (myDataGridView.SelectedRows.Count == 0)
                return;
      
            if (e.KeyCode == Keys.Enter)
            {
                 string firstColumnValue = myDataGridView.SelectedRows[0].Cells[0].Value.ToString();
      
                 // passes the value through the constructor to the 
                 //   second form.
                 MySecondForm f2 = new MySecondForm(firstColumnValue);
                 f2.Show();
            }
       }
      

      【讨论】:

      • 它给出错误 - System.NullReferenceException 未处理 Message="对象引用未设置为对象的实例。"
      【解决方案4】:

      表格 1 代码:

      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
          }
      
          private void Form1_Load(object sender, EventArgs e)
          {
              DataTable dt = new DataTable();
              dt.Columns.Add("ID");
              dt.Columns.Add("Name");
              dt.Rows.Add();
              dt.Rows[dt.Rows.Count - 1][0] = "1";
              dt.Rows[dt.Rows.Count - 1][1] = "Stackoverflow";
              dataGridView1.DataSource = dt;
          }
          string ID = string.Empty;
          private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
          {
              ID = dataGridView1.SelectedRows[0].Cells["ID"].Value.ToString();
          }
             private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
          {
              if (e.KeyCode == Keys.Enter)
              {
                  Form2 frmTwo = new Form2(ID);
                  frmTwo.Show();
              }
          }
      }
      

      表格2代码:

      public partial class Form2 : Form
      {
          public string Id = string.Empty;
          public Form2(string FormOneID)
          {
              InitializeComponent();
              Id = FormOneID;
          }
      
          private void Form2_Load(object sender, EventArgs e)
          {
              MessageBox.Show("FormOne ID" + Environment.NewLine + Id + Environment.NewLine + "Displaying on FormTwo");
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多