我已经实现了一个使用TextRenderer.DrawText的CellPainting事件处理程序,它一直运行良好,直到一个单元格中有一个&符号。单元格在编辑单元格时正确显示&符号,但在完成编辑并绘制它时,它会显示为一条小行(不是下划线)。
using System;
using System.Drawing;
using System.Windows.Forms;
namespace StackOverFlowFormExample {
public partial class DataGridViewImplementation : DataGridView {
public DataGridViewImplementation() {
InitializeComponent();
this.ColumnCount = 1;
this.CellPainting += DGV_CellPainting;
}
private void DGV_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) {
if (!e.Handled && e.RowIndex > -1 && e.Value != null) {
e.PaintBackground(e.CellBounds, false);
TextRenderer.DrawText(e.Graphics, e.Value.ToString(),
e.CellStyle.Font, e.CellBounds,
e.CellStyle.ForeColor, TextFormatFlags.VerticalCenter);
e.Handled = true;
}
}
}
}
//creating the datagridview
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
DataGridViewImplementation dgvi = new DataGridViewImplementation();
this.Controls.Add(dgvi);
dgvi.Rows.Add("this is a & value");
}
}
替换
TextRenderer.DrawText(e.Graphics, e.Value.ToString(),
e.CellStyle.Font, e.CellBounds,
e.CellStyle.ForeColor, TextFormatFlags.VerticalCenter);
与
e.PaintContent(e.ClipBounds);
正确显示,当然我希望能够自定义内容的绘画。 我也尝试过使用
e.Graphics.DrawString(e.Value.ToString(), e.CellStyle.Font, Brushes.Black, e.CellBounds);
但它并没有像
那样绘制它e.Paint(e.ClipBounds, e.PaintParts);
在绘制一个不需要我自定义绘画的单元格时,我在实际代码中使用了e.Paint。
如何让e.Graphics.DrawString看起来与e.Paint相同或者让TextRenderer.DrawText正确显示&符号?
答案 0 :(得分:6)
您想使用TextRenderer版本,因为DrawString实际上只能用于打印:
import org.modelmapper.Converter;
import org.modelmapper.spi.MappingContext;
public class ModelMapperTypedStringConverter<T extends TypedString> implements Converter<String, T> {
@Override
public T convert(MappingContext<String, T> context) {
return (T) TypedStringConverter.createNewInstanceFromValue(context.getSource(), context.getDestinationType());
}
}
NoPrefix标志将正确显示&符号。