【问题标题】:Can a C# DataGridView cell be both Multiline and single line?C# DataGridView 单元格可以同时是多行和单行吗?
【发布时间】:2017-11-20 20:59:24
【问题描述】:

我正在动态构建一个 DataGridView,文本框可能有一个与之关联的 AutoComplete 自定义源。在某些情况下,当我将 textbox.Multiline 设置为 true 时,会得到以下效果。如果我没有主动编辑单元格,它看起来像这样:

但是,如果我尝试编辑单元格,它看起来像这样:

如果我在此编辑模式单元格周围移动光标,焦点会完全跳出单元格,而不是移动文本或扩大单元格高度。看起来好像它试图同时处于多行和单行模式,但我不确定。

有什么想法吗?

【问题讨论】:

  • 查看如何使用 datagridview ItemTemplates,例如,您可以使用多行文本框进行此操作
  • 更新:看来问题在于 DataGridView 中文本框的位置设置为 (3,49) 而不是 (0,0)。不过,试图将其强制为new Point(0,0) 并没有给我带来任何好处。我遇到了 Microsoft 错误吗?

标签: c# datagridview


【解决方案1】:

我找到了解决方案 - 不是根本原因。在 EditingControlShowing 中,我执行以下操作:

textBox.Dock = textBox.Multiline ? DockStyle.Fill : DockStyle.None;

我在哪里设置了textBox = (TextBox) e.Control;

这是一个大锤式的解决方案,但它确实有效。

【讨论】:

    【解决方案2】:

    让我们为 DataGridView 对象命名:dgv, 所以在 dgv_CellEnter 事件上添加以下行

    int idxcol = dgv.Columns["YourColumnName"].Index;
                if (e.ColumnIndex == idxcol)
                    dgv.Columns[idxcol].DefaultCellStyle.WrapMode = DataGridViewTriState.False;
    

    并在 dgv_CellLeave 事件上添加以下行

    int idxcol = dgv.Columns["YourColumnName"].Index;
    if (e.ColumnIndex == idxcol )
                {
                    dgv.Columns[e.ColumnIndex].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
                }
    

    【讨论】:

      猜你喜欢
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多