c# listbox 自动换行
8个回答
展开全部
LISTBOX不支持一条记录占多行,但是可以把一条很长的记录用截取的方法截取,然后获取截了多少个,最后用for循环,listbox.add()方法一行行加入就行了。
例如:有一个25个字符的数据,LISTBOX(大小可调)一行能写15个字符,你第一行截0到15,第二行16到25,截了两次,存在一个数组里面,然后用循环加就是了,具体的算法自己来吧,加油了~~~
不过我建议你用textbox吧,只要在产生记录的时候加上“/r/n”就能实现换行。
例如:有一个25个字符的数据,LISTBOX(大小可调)一行能写15个字符,你第一行截0到15,第二行16到25,截了两次,存在一个数组里面,然后用循环加就是了,具体的算法自己来吧,加油了~~~
不过我建议你用textbox吧,只要在产生记录的时候加上“/r/n”就能实现换行。
展开全部
listbox是可以换行的,看到很多人说不能换行那是人云亦云,不太了解这个控件。只是listbox换行麻烦一点。要做以下几步:(1)把DrawMode属性设置为OwnerDrawVariable,让其行高能调节。(2)重写DrawItem事件,自己绘制格式,这个网上可以查,很容易。(3)重写MeasureItem事件,控制每项的高度,确保其高度能显示出换行之后的文字,如果高度不够那么就会显示不出来。(4)把需要添加的文字要换行的地方添加上“\n”.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//自定义控件, 然后在工具箱拖过来用 再把BackColor 设置为Transparent
public partial class TransparentListBox : ListBox
{
public TransparentListBox()
{
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
protected override void OnSelectedIndexChanged(EventArgs e)
{
this.Invalidate();
base.OnSelectedIndexChanged(e);
}
protected override void OnPaint(PaintEventArgs e)
{
if (this.Focused && this.SelectedItem != null)
{
Rectangle itemRect = this.GetItemRectangle(this.SelectedIndex);
e.Graphics.FillRectangle(Brushes.Green, itemRect);
}
for (int i = 0; i < Items.Count; i++)
{
e.Graphics.DrawString(this.GetItemText(Items[i]), this.Font, new SolidBrush(this.ForeColor), this.GetItemRectangle(i));
}
base.OnPaint(e);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对,里面肯定有这样的属性,你也可以添加valueChange这样的事件,检查到字符多到要换行的时候,执行换行动作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
listbox这玩意儿不支持一条记录占多行的情况吧?
回答者: fancyivan - 初入江湖 三级 9-4 18:23
没错~
回答者: fancyivan - 初入江湖 三级 9-4 18:23
没错~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询