MultiRow TextboxCell 的编辑时长度和可显示的长度
TextBoxCell框长度可以显示13位 编辑时只显示12位输入大于12位时 末尾每输入一位 前面就少一位 始终保持在12位 我不能重现你说的问题,是否能够给更多的信息,TextBoxCell.Size,Font, 显示的文字信息。
你也可以设置TextBoxCell.Style.UseCompatibleTextRendering = true, 看看是否能够消除你说的问题。 回复 2楼dafo的帖子
不好意思 我想实现这样的效果 不知可否实现 ? 求大神们回复 请在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;
}
}
}
}
回复 5楼dafo的帖子
如果用这种方法的话 显示上可能没有问题了 但是实际值是不是就不对了 先和你确认下需求:
你是要非编辑状态下只显示后12位字符,实际存储的值是一个不裁剪的完整输入值?
当前的这个方案,如果输入长度超过12位将自动将开头的裁剪掉,所以存储到Cell.Value值也是一个裁剪后的值。 回复 7楼dafo的帖子
在编辑状态下
一直显示12位字符 实际输入的东西不变 请尝试下边实例代码:
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;
}
}
}
}
回复 9楼dafo的帖子
谢谢@dafo
:hjyzw:
页:
[1]