DrawString与textbox的字距行距不同,有没有办法改为相同?

laolaixuebiancheng 2012-08-11 06:06:24
我用DrawString绘制了一些文字,然后我希望鼠标点击的时候可以选择文字,于是用一个TEXTBOX来覆盖该区域,但textbox居然跟直接绘制的字间距和行距与DrawString不同,点击文字位置都变了,大家有没有办法改变textbox的字间距行距或者更改drawstring的字距行距也可以,只要两者一致即可
如果实在不行,能不能告诉我textbox是如何工作的,我该如何做到选择字的功能?
...全文
462 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kellen_He 2012-11-20
  • 打赏
  • 举报
回复
闪烁的话用双缓冲。
laolaixuebiancheng 2012-11-20
  • 打赏
  • 举报
回复
引用 13 楼 Kellen_He 的回复:
textbox也是继承自control, 然后只是在Onpaint中绘制了样式, 你说的用Drawstring绘制文字不能选择是什么意识? 如果你想绘制一个TextBox可以这样做, 1. 建一个类继承control 2. 重写onpaint, 在里面绘制一个Rectangle,加上边框,然后FillRectangle用白色, 基本上一个TextBox的样式就出来了, 3. 重写……
我就是用这个方式来写,想做一个自己要的TEXTBOX出来,结果,被搞死在选定文字复制和防止闪烁两个问题上,想自己写最基础的控件,太难了
Kellen_He 2012-11-20
  • 打赏
  • 举报
回复
textbox也是继承自control, 然后只是在Onpaint中绘制了样式, 你说的用Drawstring绘制文字不能选择是什么意识? 如果你想绘制一个TextBox可以这样做, 1. 建一个类继承control 2. 重写onpaint, 在里面绘制一个Rectangle,加上边框,然后FillRectangle用白色, 基本上一个TextBox的样式就出来了, 3. 重写响应键盘输入的事件, 获取输入的Text,在事件中调用DrawString把Text画上去。 虽然没做过Textbox, 但是基本上是这样
laolaixuebiancheng 2012-11-20
  • 打赏
  • 举报
回复
还有没有人回帖,没有结贴算了?
houjie10241015 2012-11-20
  • 打赏
  • 举报
回复
引用 10 楼 a33440521 的回复:
先在窗体类中声明一个StringBuilder类型的对象,然后在button的单击事件中编写: st.Append(@"\rtf1\fbidis\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fnil\fcharset134 \'……
你这个方法我搜到了的,但我不明白究竟为什么,也无法修改为我想要的,比如我只加一个框怎么加,我也试过用别的软件读出单独一个框的RTF,但我还是不明白该怎么去动态添加,如果你能更清楚一点告诉我怎么用程序语言动态添加,那这100分就是你的了
  • 打赏
  • 举报
回复
先在窗体类中声明一个StringBuilder类型的对象,然后在button的单击事件中编写: st.Append(@"\rtf1\fbidis\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fnil\fcharset134 \'cb\'ce\'cc\'e5;}} {\colortbl ;\red0\green0\blue0;} \viewkind4\uc1\trowd\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx1596\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx3300\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx5004\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx6709\clbrdrt\brdrw15\brdrs\clbrdrl\brdrw15\brdrs\clbrdrb\brdrw15\brdrs\clbrdrr\brdrw15\brdrs \cellx8414\pard\intbl\ltrpar\kerning2\f0\fs21\cell\cell\cell\cell\cell\row \intbl\cell\cell\cell\cell\cell\row \intbl\cell\cell\cell\cell\cell\row \intbl\cell\cell\cell\cell\cell\row \pard\ltrpar\lang2052\kerning0\f1\fs18\par "); richtextBox控件的Rtf = "{"+st.ToString()+"}";这样就可以了,你试试看。
XBodhi. 2012-11-20
  • 打赏
  • 举报
回复
把层次控制好,你在画东西的时候,覆盖的不要改变他的坐标。
laolaixuebiancheng 2012-11-20
  • 打赏
  • 举报
回复
引用 7 楼 lshfong 的回复:
用样式来控制呢
是winform不是webform
lshfong 2012-11-20
  • 打赏
  • 举报
回复
用样式来控制呢
laolaixuebiancheng 2012-11-20
  • 打赏
  • 举报
回复
这贴这么多分要浪费了,这样吧,换一个问问题的方式,我该如何动态在richtextbox里面添加表格?回答这个问题就结贴给分,谢谢!
laolaixuebiancheng 2012-08-12
  • 打赏
  • 举报
回复
我说的是winform里面的直接绘制和用textbox或者richtextbox的区别,我搜了一下,认为还是直接用drawstring来解决绘制后鼠标选取复制的问题更直接些,希望大家告诉我textbox是如何做到这一功能的,我自己写一个textbox算了
bdmh 2012-08-11
  • 打赏
  • 举报
回复
你肯定是代码写的有问题,首先你应该记录绘图元素的区域,然后将textbox绑定到这个区域,或者不使用textbox,直接绘制输入效果
足球中国 2012-08-11
  • 打赏
  • 举报
回复
textbox是用的底层的一个东东封装的。
蝶恋花雨 2012-08-11
  • 打赏
  • 举报
回复
刚才回答的是textbox字体的行间距。
如果要实现间接的话还是用RichTextBox比较好。
详细参照http://topic.csdn.net/u/20070516/12/6b17e84f-91ea-4ddd-b364-d734d7e2c503.html
蝶恋花雨 2012-08-11
  • 打赏
  • 举报
回复
textbox 用样式 line-height:16px;/

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧