tydou 发表于 2015-8-24 20:04:00

MultiRow TextboxCell 的编辑时长度和可显示的长度

TextBoxCell框长度可以显示13位 编辑时只显示12位
输入大于12位时 末尾每输入一位 前面就少一位 始终保持在12位

dafo 发表于 2015-8-25 11:15:00

我不能重现你说的问题,是否能够给更多的信息,TextBoxCell.Size,Font, 显示的文字信息。
你也可以设置TextBoxCell.Style.UseCompatibleTextRendering = true, 看看是否能够消除你说的问题。

tydou 发表于 2015-8-25 14:56:00

回复 2楼dafo的帖子

不好意思 我想实现这样的效果 不知可否实现 ?

tydou 发表于 2015-8-26 11:58:00

求大神们回复

dafo 发表于 2015-8-26 15:14:00

请在GcMultiRow.CellEditedFormattedValueChanged事件中添加如下代码:

      private void gcMultiRow1_CellEditedFormattedValueChanged(object sender, CellEditedFormattedValueChangedEventArgs e)
      {
            if (this.gcMultiRow1.IsCurrentCellInEditMode)
            {
                if (this.gcMultiRow1.EditingControl is TextBox)
                {
                  var textBox = this.gcMultiRow1.EditingControl as TextBox;
                  if (textBox.Text.Length > 12)
                  {
                        textBox.Text = textBox.Text.Remove(0, textBox.Text.Length - 12);
                        textBox.SelectionLength = 0;
                        textBox.SelectionStart = textBox.Text.Length;
                  }
                }
            }
      }

tydou 发表于 2015-8-26 15:40:00

回复 5楼dafo的帖子

如果用这种方法的话 显示上可能没有问题了 但是实际值是不是就不对了

dafo 发表于 2015-8-26 16:45:00

先和你确认下需求:
你是要非编辑状态下只显示后12位字符,实际存储的值是一个不裁剪的完整输入值?

当前的这个方案,如果输入长度超过12位将自动将开头的裁剪掉,所以存储到Cell.Value值也是一个裁剪后的值。

tydou 发表于 2015-8-26 19:39:00

回复 7楼dafo的帖子

在编辑状态下
一直显示12位字符 实际输入的东西不变

dafo 发表于 2015-8-27 10:54:00

请尝试下边实例代码:

      private void gcMultiRow1_CellPainting(object sender, CellPaintingEventArgs e)
      {
            if (e.Scope == CellScope.Row)
            {
                if (e.Value != null && e.Value is string)//In here, you can filter target cell by e.CellIndex/CellName
                {
                  string str = (string)e.Value;
                  if (str.Length > 12)
                  {
                        e.PaintBackground(e.ClipBounds);
                        str = str.Remove(0, str.Length - 12);
                        using (SolidBrush brush = new SolidBrush(e.CellStyle.ForeColor))
                        {
                            var strSize = e.Graphics.MeasureString(str, e.CellStyle.Font);
                            e.Graphics.DrawString(str, e.CellStyle.Font, brush, new PointF(e.CellBounds.Location.X, e.CellBounds.Location.Y + (e.CellBounds.Height - strSize.Height) / 2));
                        }
                        e.PaintBorder(e.ClipBounds);
                        e.PaintCellNoteTriangleSymbol(e.ClipBounds);
                        e.PaintErrorIcon(e.ClipBounds);
                        e.PaintWaveLine(e.ClipBounds);
                        e.Handled = true;
                  }
                }
            }
      }

Alice 发表于 2015-9-6 09:43:00

回复 9楼dafo的帖子

谢谢@dafo
:hjyzw:
页: [1]
查看完整版本: MultiRow TextboxCell 的编辑时长度和可显示的长度