如何包装无的WinForms的DataGridViewTextBoxCell(C#),空格或换行符长文本?

如何包装无空格或换行符长文本DataGridViewTextBoxCell的WinForms的(C#)?

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { if ((e.ColumnIndex == 1) && (e.FormattedValue != null)) { SizeF sizeGraph = e.Graphics.MeasureString(e.FormattedValue.ToString(), e.CellStyle.Font, e.CellBounds.Width); RectangleF cellBounds = e.CellBounds; cellBounds.Height = cellBounds.Height; if (e.CellBounds.Height > sizeGraph.Height) { cellBounds.Y += (e.CellBounds.Height - sizeGraph.Height) / 2; } else { cellBounds.Y += paddingValue; } e.PaintBackground(e.ClipBounds, true); using (SolidBrush sb = new SolidBrush(e.CellStyle.ForeColor)) { e.Graphics.DrawString(e.FormattedValue.ToString(), e.CellStyle.Font, sb, cellBounds); } e.Handled = true; } }

与上面的代码时柱的与索引1列的宽度被改变它包扎的文本,但不增加每一行的高度。

--------------解决方案-------------

我不觉得有什么用格式化标志来包装单个字成多行的方法。

你可能必须通过计算来自己做。

一个例子(速度不优化):

private void PaintCell(Graphics g, Rectangle cellBounds, string longWord) {
g.TextRenderingHint = TextRenderingHint.AntiAlias;
float wordLength = 0;
StringBuilder sb = new StringBuilder();
List<string> words = new List<string>();

foreach (char c in longWord) {
float charWidth = g.MeasureString(c.ToString(), SystemFonts.DefaultFont,
Point.Empty, StringFormat.GenericTypographic).Width;
if (sb.Length > 0 && wordLength + charWidth > cellBounds.Width) {
words.Add(sb.ToString());
sb = new StringBuilder();
wordLength = 0;
}
wordLength += charWidth;
sb.Append(c);
}

if (sb.Length > 0)
words.Add(sb.ToString());

g.TextRenderingHint = TextRenderingHint.SystemDefault;
g.DrawString(string.Join(Environment.NewLine, words.ToArray()),
SystemFonts.DefaultFont,
Brushes.Black,
cellBounds,
StringFormat.GenericTypographic);
}

分类:C# 时间:2012-01-01 人气:4
本文关键词: .NET中,的WinForms
分享到:

相关文章

  • 验证字段中的WinForms 2012-05-11

    有没有在的WinForms验证领域的捷径? 例如,一个特定的文本框需要保存记录之前被填满. 我一直做的是我在保存之前编程先检查所有必填字段. 例: protected bool CheckFields() { bool isOk = false; if(textBox1.Text != String.Empty) { isOk = true; } return isOk; } private void btnSave_Click(object sender, EventArgs e) { if(

  • 在C#中的WinForms使用CMD命令 2012-05-22

    我想用C#中的WinForms CMD命令创建一个文件夹到DIR,与给定的目录路径, 例如 "C:\ TEMP> MD MyFolder文件" 我不知道如何可以使用C#赢形式的平台上执行. 我试图寻找谷歌,但找不到任何东西,它是一个很好的做法,使用它,我想用它东阳我的目录路径的唯一原因是太久Directory.CreateDirectory()方法. 我摸索出CMD具有相同的局限性,因为C#"CreateDirectory"的方法. 感谢您的评论和答案的人.

  • 编程方式显示工具提示中的WinForms应用程序 2012-06-03

    我如何编程导致控件的工具提示中的WinForms应用程序显示,而无需鼠标悬停在控制? (P / Invoke的是确定的,如果必要的话). --------------解决方案------------- 如果您使用的Tooltip控制的形式,你可以做到这一点是这样的: ToolTip1.Show("Text to display", Control) MSDN文档的工具提示控件的"显示"方法对这个问题以及如何使用它们所有的不同的变化. System.Windows.F

  • 任何新的在.NET 4.0中的WinForms 2012-07-03

    我无法找到新的WinForm功能的任何信息,exept的这篇博客文章:http://blog.codinglight.com/2009/05/future-of-winforms-whats-changed-in.html其中规定: 213种被改变,并加入9种类型. 596方法进行了改变,50,并将 8除去. 因此,whats在这些变化,乔开发者? --------------解决方案------------- Windows窗体处于维护模式. 每个框架新闻稿中的某些更改,但他们都是只发加强安全

  • WPF事件中的WinForms 2012-07-21

    我有一个使用WPF控件(如果它很重要的Avalon编辑)内的ElementHost的一个WinForms应用程序. 这似乎是工作的罚款,但我希望能够处理这种控制的的WinForms方式的按键事件(无RoutedCommands和InputGestures),所以我虽然我可以只处理窗体的KeyDown事件具有的KeyPreview集,但WPF事件似乎还没有泡到表格. 所以基本上,你怎么能访问KeyDown事件在WPF控件中的WinForms方式? --------------解决方案-------

  • 如何不在身边容器中的WinForms使用IoC容器时,通过 2012-11-16

    我是新来的IoC的世界,具有在一个WinForms应用程序中实现它的一个问题. 我有一个使用MVC非常基本的应用程序WinForm应用程序,这是一个控制器,做所有的工作和工作对话框(很明显,一个控制器). 所以,我加载所有我班在Program.cs中我的IoC容器,并使用该容器中创建的主要形式控制器. 但是,这是我有问题,我只是想创建工作对话框控制器时,它的使用和使用语句中. 起初,我通过在容器中,但我读过,这是不好的做法,更在容器是一个静态的,我想单元测试这个类. 那么,你如何创建类在单元测试

  • 如何忽略简单事件在C#中的WinForms改变控制状态时,射击? 2012-12-01

    我创建在C#中的WinForms一个简单的表格,并运行到一个常见的​​情况,其中一个控制可以改变别人的状态,但两个控件"事件引发一些其他的方法. 例如,考虑一个Checkbox和NumericUpDown ,其中任何一个的状态或值应该触发东西重绘. 该NumericUpDown取决于Checkbox这就意味着它可以禁止或忽略,除非该Checkbox被选中. 然而,它方便了用户改变NumericUpDown值,并具有Checkbox ,如果它不是已被自动检查. 因此,这里所讨论的方法: priva

  • 添加图片到复选框中的WinForms 2013-03-30

    我有一个映像路径(有些事情是这样的"http://ABC/XYZ/PQR.gif").而我要分配这一形象使用C#.winfroms复选框没有SRC中的WinForms到复选框,我该如何分配此图片复选框.? --------------解决方案------------- 的复选框的背景 可以填充有一个提供的图像. 看到 复选框概述 复选框会员 Control.BackgroundImage物业 尝试这个 设置BackgroundImage属性. 更改BackGroundImageLayo

  • 为什么拉绳展示在C#中的WinForms意外的行为? 2013-08-22

    我有子类在C#中的WinForms控制,和我的自定义绘制文本在我OnPaint()处理程序. 字体设置使用我表格下面的代码宋体: FontFamily family = new FontFamily("Courier New"); this.myControl.Font = new Font(family, 10); 在控制本身,字符串存储在realText ,我用的是下面的代码把它绘制到屏幕: protected override void OnPaint(PaintEventArg

  • 我怎么能滚动到指定行中的WinForms TextBox中使用C#? 2013-08-27

    我怎么能滚动到指定行中的WinForms TextBox中使用C#? 谢谢 --------------解决方案------------- 以下是如何滚动的选择: textBox.ScrollToCaret(); 要滚动到指定的路线,你可以通过TextBox.Lines财产环,总其长度找到指定行的开始,然后设置TextBox.SelectionStart定位插入符号. 沿着这(未经测试的代码)行的内容: int position = 0; for (int i = 0; i < lineToGo

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.825 (s). 10 q(s)