怎样写网站设计意义,内江做网站的公司,做捕鱼网站电话号码,房地产的未来趋势分析【啰嗦2句】 现在用C#的人很少了吧#xff1f;GDI更少了吧#xff1f;所以这个问题估计也冷门。没关系#xff0c;分享给特定需要的人也不错。
【问题现象】 工作中开发了一个报告编辑器#xff0c;实现图文排版等功能#xff0c;用着没什么问题#xff0c;直到有一天…【啰嗦2句】 现在用C#的人很少了吧GDI更少了吧所以这个问题估计也冷门。没关系分享给特定需要的人也不错。
【问题现象】 工作中开发了一个报告编辑器实现图文排版等功能用着没什么问题直到有一天发现文本框粘贴的内容暗藏Tab键保存为\t字符比如“银丝鸡蛋面 GB 28050-2011 100克 ”用DrawString怎么绘制都会忽略中间的间距变成“银丝鸡蛋面GB 28050-2011100克”。 比较糟糕的是MySQL数据库查看时的值也是“银丝鸡蛋面GB 28050-2011100克”。 【分析历程】 刚开始并不知道是中间包含着Tab键从MySQL数据库复制到NotePad后发现有这个tab分隔才找到原因。还以为是没法保存\t这个符号。 既然有这个键值为什么DrawString没有识别并区分呢不知道。CSDN的做法比较巧妙我编辑这篇文章时看到CSDN把Tab键转换成了8个空格。这个是不错的做法按理说我的报告编辑器也可以这么做。但是仍然希望所见所得吧作为报告希望保留内容的原始性。 最终在微软在线文档中发现有个StringFormat.SetTabStops()方法似乎是一个希望。链接看这个微软文档StringFormat.SetTabStops(Single, Single[]) 方法 【解决案例】 1、微软文档的做法其实并没有解决问题。 新建一个窗体Form1双击Paint事件编辑代码。
/// summary
/// 直接在Form的Paint演示
/// /summary
/// param namesender/param
/// param namee/param
private void Form1_Paint(object sender, PaintEventArgs e)
{//注意“直接的”前面是换行符string text Hello, 移动中的鸭子!\n直接的\t方法\t来获\t取每\t个字符的精确位置。;Graphics graphics e.Graphics;// 设置文本的布局制表符将会根据这个对齐方式计算StringFormat format new StringFormat();format.Alignment StringAlignment.Near;//这个tabStops是重点但是也很难搞懂float[] tabStops { 100.0f,50.0f,20.0f,100.0f,20.0f }; //每个间隔跟上一个的间隔像素format.SetTabStops(0, tabStops);//设置起始符位置0其他的按tabStopsgraphics.DrawString(text, this.Font, new SolidBrush(Color.Green), 10, 10, format);
}
原文Hello, 移动中的鸭子!\n直接的\t方法\t来获\t取每\t个字符的精确位置
运行效果如下图 这里微软官方解释 tabStops 数组中的每个制表位偏移量第一个除外相对于上一个。 第一个制表位偏移量相对于由 firstTabOffset指定的初始偏移位置。 例如如果初始偏移位置为 8第一个制表位偏移量为 50则第一个制表位位于位置 58。 如果初始偏移位置为零则第一个制表位偏移量相对于位置 0字符串原点。 实际我测试了多个tabStops数组值第一个值比较准其他表现得莫名其妙。比如 tabStops { 100.0f,50.0f,20.0f,50.0f} 由于资料很少所以这个方案只能作为参考可能受不同系统语言、地区等影响表现未必符合要求。有兴趣的读者可以再摸索摸索。 2、参照CSDN这种做法直接把\t替换为4个或8个空格。推荐用这种方法。
label3.Text text.Replace(\t, );