【问题标题】:VB.NET Controls inside of a DataGridView Row on a Windows FormWindows 窗体上 DataGridView 行内的 VB.NET 控件
【发布时间】:2008-11-25 15:01:32
【问题描述】:

我在 Windows 窗体上的 DataGridView Row 的单元格内有一个 ComboBox。我需要发生以下事情:

  1. 点击组合框
  2. 选择一个值
  3. 重新计算总和并显示在当前标签内 在 DataGridView 之外。

目前,正在发生以下情况:

  1. 点击组合框
  2. 再次点击打开CB的下拉列表
  3. 选择一个值
  4. 在单元格外部单击以强制重新计算 外部标签。

我想避免,首先,必须单击组合两次(一次设置焦点,再次选择值)。其次,我希望在选择一个值后进行实时重新计算。

有没有人有一两个技巧来解决这些问题?

我在 DGV 上尝试了大部分活动,但运气不佳。

【问题讨论】:

标签: vb.net winforms


【解决方案1】:

为 DataGridView 的 CellClick 事件添加一个处理程序,看起来有点像:

private void vehicleTypeGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if ( e.RowIndex == - 1 ) return; //Header Cell clicked -> ignore it.
    vehicleTypeGridView.BeginEdit ( true );
    var control = vehicleTypeGridView.EditingControl as DataGridViewComboBoxEditingControl;
    if ( control != null ) control.DroppedDown = true;
}

【讨论】:

    【解决方案2】:

    首先,设置你的datagridview编辑模式:

    datagridview.EditMode = Windows.Forms.DataGridViewEditMode.EditOnEnter
    

    接下来,将组合框的发送键设置为 F4:

    Private Sub datagridview_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs)
            Handles datagridview.EditingControlShowing
        Dim CB As Object = TryCast(e.Control, System.Windows.Forms.ComboBox)
        If CB IsNot Nothing Then
            My.Computer.Keyboard.SendKeys("{F4}")
        End If
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多