做个winform的填空题的自定义控件,能个思路或示例 校果如下图所示;(控件的宽度是可调整的,在下划线上可直接填写答案。) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 尽输入的地方,textbox就可以实现的,tag属性可以保存对应的题目id,mousehover时,就可以读取答案 我是期望把它做成一个控件。1. 其它文字用什么控件来显示呢?2.填空部分(TextBox只显示一条下划线)如何实现3.由于宽度不确定,每个题的'空"的数量也不确定,该如何处理? 每个题目中需要填写的部分用你自定义的协议字符串来代替(字符串包含了正确答案),当你解析这个题目的时候解析到填空的地方就draw一个文本框 直接用_______这个现实,当点击的时候,判断是不是点在了____上面了,如果是,就Show一个TextBox控件处理啊,并设置TextBox的位置和大小刚好覆盖_______这个地方当点击其他地方的时候,把____替换为答案,并设置答案为粗体,当点击到粗体的文字,Show一个TextBox,并把TextBox的内容设置为粗体的文字。 这是一个方法。我图片所示的内容,好像就是所内容显示在RichTextBox中,在下划线处就是TextBox控件。但TextBox放在____处,这个位置不好精确控制。能说一下如何把TextBox刚好放在____位置吗? 这是一个方法。我图片所示的内容,好像就是所内容显示在RichTextBox中,在下划线处就是TextBox控件。但TextBox放在____处,这个位置不好精确控制。能说一下如何把TextBox刚好放在____位置吗?用下面这三个函数就可以完成了!richTextBox1.GetCharFromPosition();richTextBox1.GetCharIndexFromPosition();richTextBox1.GetPositionFromCharIndex(); //以下是循环创建textbox for (int i = 0; i <= ctrlName.Count - 1; i++) { k = richTextBox1.Text.IndexOf(_LINE, (i==0?0: k+_LINE.Length) ); if (k > -1) { Point xx = richTextBox1.GetPositionFromCharIndex(k);//获取当前下划线的Point lrCtrlComponent.myTextBox t = new lrCtrlComponent.myTextBox();//这是一个TextBox的自定义控件(此textbox只有下边框) t.Name = ctrlName[i].ToString(); t.Size = new System.Drawing.Size(this._TextBoxLength , 28); t.Location = new Point(xx.X, xx.Y + 15);//y值+15是根据显示效果调整出来的值 t.Font = new Font("宋体", 9, FontStyle.Bold); //如果字号调大点后,文框框与文字更是对不整齐。 this.richTextBox1.Controls.Add(t); t.Visible = true; } }//当resize或VScroll时,生成的textbox要与_______一起移动。 void changeTextBoxPoint() { int i = 0; int L = 0;//位置 for (i = 0; i <= richTextBox1.Controls.Count - 1; i++) { if (richTextBox1.Controls[i].GetType().ToString() == "lrCtrlComponent.myTextBox") { CET.lrCtrlComponent.myTextBox txt = (CET.lrCtrlComponent.myTextBox ) richTextBox1.Controls[i]; L = richTextBox1.Text.IndexOf(_LINE, L+(L==0?0: _LINE.Length) ); Point xx= richTextBox1.GetPositionFromCharIndex(L); txt.Location = new Point(xx.X, xx.Y + 15); txt.Size = new Size(this._TextBoxLength , 28); } } }效果;请帮忙看一下,怎么更能精确控制textbox与文字能真正底部对齐 添加标准的TextBox截图如下:该如何解决???? 原因基本找到。由于//获取当前下划线的Point (它是获取文字左上角顶点的Point值)Point xx = richTextBox1.GetPositionFromCharIndex(k); 由于本RichTextBox中内容的格式设置有: 1.段前距:5 磅 2.行距:20 磅因此每段的第一行与其它行的行高不同。要想TextBox对文字底部对齐:因此TextBox的位置应在(假定TextBox高为28):Point xx = richTextBox1.GetPositionFromCharIndex(k); textbox.Location=new point (xx.X, xx.Y- (当前行高-textbox.height));目前的问题是如何获取RichTextBox的每行的行高值。baikdu了N久也没找到C#中如何获取当行高的资料.. 用这个函数richTextBox1.GetPositionFromCharIndex(...)两行各区一个字符去获取他的位置,然后Y坐标相减。这样可以不? 搞定。用下一行的y值-上行的y值,这样应是本行高。这个我没试,估计应可以。我是直接读rtf格式设置参数。 .net 设置图片显示个数 如何在DataGridView的某一个Cell中添加多行或多列 C# 上传数据库报错,你们见过这错误吗 关于UdpClient的问题 如何取得文本文件的CodePage? web页table中颜色在打印时如何显示 怎么设置一个项目运行时最初打开的窗口? socket接收数据问题,帮忙看看错处. RowFilter 后 子集与原始数据怎样同步?高分奉上 重分酬谢:C#界面问题 c# winform开发中,怎样让控件超出窗体的部分显示 ASP.NET之XML:要插入的节点出自不同的文档上下文
2.填空部分(TextBox只显示一条下划线)如何实现
3.由于宽度不确定,每个题的'空"的数量也不确定,该如何处理?
当点击其他地方的时候,把____替换为答案,并设置答案为粗体,
当点击到粗体的文字,Show一个TextBox,并把TextBox的内容设置为粗体的文字。
这是一个方法。我图片所示的内容,好像就是所内容显示在RichTextBox中,在下划线处就是TextBox控件。
但TextBox放在____处,这个位置不好精确控制。能说一下如何把TextBox刚好放在____位置吗?
这是一个方法。我图片所示的内容,好像就是所内容显示在RichTextBox中,在下划线处就是TextBox控件。
但TextBox放在____处,这个位置不好精确控制。能说一下如何把TextBox刚好放在____位置吗?用下面这三个函数就可以完成了!richTextBox1.GetCharFromPosition();
richTextBox1.GetCharIndexFromPosition();
richTextBox1.GetPositionFromCharIndex();
for (int i = 0; i <= ctrlName.Count - 1; i++)
{
k = richTextBox1.Text.IndexOf(_LINE, (i==0?0: k+_LINE.Length) );
if (k > -1)
{
Point xx = richTextBox1.GetPositionFromCharIndex(k);//获取当前下划线的Point
lrCtrlComponent.myTextBox t = new lrCtrlComponent.myTextBox();//这是一个TextBox的自定义控件(此textbox只有下边框)
t.Name = ctrlName[i].ToString();
t.Size = new System.Drawing.Size(this._TextBoxLength , 28);
t.Location = new Point(xx.X, xx.Y + 15);//y值+15是根据显示效果调整出来的值
t.Font = new Font("宋体", 9, FontStyle.Bold); //如果字号调大点后,文框框与文字更是对不整齐。
this.richTextBox1.Controls.Add(t);
t.Visible = true;
} }
//当resize或VScroll时,生成的textbox要与_______一起移动。
void changeTextBoxPoint()
{
int i = 0;
int L = 0;//位置
for (i = 0; i <= richTextBox1.Controls.Count - 1; i++)
{
if (richTextBox1.Controls[i].GetType().ToString() == "lrCtrlComponent.myTextBox")
{
CET.lrCtrlComponent.myTextBox txt = (CET.lrCtrlComponent.myTextBox ) richTextBox1.Controls[i];
L = richTextBox1.Text.IndexOf(_LINE, L+(L==0?0: _LINE.Length) );
Point xx= richTextBox1.GetPositionFromCharIndex(L);
txt.Location = new Point(xx.X, xx.Y + 15);
txt.Size = new Size(this._TextBoxLength , 28);
}
}
}
效果;
请帮忙看一下,怎么更能精确控制textbox与文字能真正底部对齐
该如何解决????
Point xx = richTextBox1.GetPositionFromCharIndex(k);
由于本RichTextBox中内容的格式设置有:
1.段前距:5 磅
2.行距:20 磅
因此每段的第一行与其它行的行高不同。要想TextBox对文字底部对齐:因此TextBox的位置应在(假定TextBox高为28):Point xx = richTextBox1.GetPositionFromCharIndex(k);
textbox.Location=new point (xx.X, xx.Y- (当前行高-textbox.height));
目前的问题是如何获取RichTextBox的每行的行高值。
baikdu了N久也没找到C#中如何获取当行高的资料..
两行各区一个字符去获取他的位置,然后Y坐标相减。
这样可以不?
用下一行的y值-上行的y值,这样应是本行高。这个我没试,估计应可以。我是直接读rtf格式设置参数。