C# combo box一行文字太长,希望水平滚动,显示完全!急急急。 C#combo box控件 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在winform下实现是相当繁锁的,那些做控件的sb自以为自己的控件很牛B,其实跟客户的需要差远了 http://www.codeproject.com/Articles/1030/A-CListBox-with-automatic-HSCROLL-maintenance 看看这个 我觉得加上额外的线程定时重绘指定区域效果应该是最好的了。比如,item【1】的字符为123456,实际上只能显示123,那么点击下拉框时触发自定义的重绘,测量输入字符绘制大小,计算好左移步进, 开启额外线程重绘程序(线程内可以绘制完成,sleep,再计算位置重绘)。当然还有笨方法,自定义一个定时器,时刻一道,把123,变成234,再变成345,直到变为456,最后再变成123。 我觉得这个思路怪费劲的到不如自己做个自定义控件上面是文本框+按钮点按钮下面出现listbox,宽度根据内容调整 就是控件的长文本滚动显示嘛,使用一个定时器timer很简单就实现了,如果有性能要求的话,可能需要使用子线程去操作timer。using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace gundong_Label{ public partial class Form1 : Form { public Form1() { InitializeComponent(); button2.Enabled = false; } private void timer1_Tick(object sender, EventArgs e) { label1.Left -=3; //设置label1左边缘与其容器的工作区左边缘之间的距离 if (label1.Right < 0) //当label1右边缘与其容器的工作区左边缘之间的距离小于0时 { label1.Left = this.Width; //设置label1左边缘与其容器的工作区左边缘之间的距离为该窗体的宽度 } } //开始演示 private void button1_Click(object sender, EventArgs e) { timer1.Enabled = true; //开始滚动 button2.Enabled = true; } //单击暂停按钮 private void button2_Click(object sender, EventArgs e) { timer1.Enabled = false; //停止滚动 button2.Enabled = false; } //退出 private void button3_Click(object sender, EventArgs e) { this.Close(); } }}滚动速度在timer控件的属性中设置。额,贴图比较多,不好意思呀 7#,你这个是针对Label控件做的,有没有针对Combo box控件做的呢?谢谢 根据内容调整,这也不符合页面设计吧,如果一个子项文字太长,那么listbox将会很宽,整体页面允许吗?而且文字长度超过屏幕,怎么办?怎么调整也无法一行显示完全的。除非换行,缩小字体。之所以广告标签看不清楚,那是因为广告类型的原因,而且自己控制滚动的速度在一个合适的范围就能看清楚了啊。还有一个办法,就是使用ToolTip控件 ,额外显示文本。具体可以参考下面的文章,就是给listbox的每个item都设置tooltip或者绑定一个tooltip控件。超出长度时使用tooltip显示全部文本。ToolTip控件 没做过Combo box的滚动哦,我也只是知道有这种实现而已。不过使用方法和属性都差不多的,可以自己试验下。刚刚想到了,就像12#那样,用tooltip显示全部文字应该是最简单的了。改变宽度,使用控件自动调整,将会对整体布局产生不可预测的影响,特别是控件多的时候。唉 用tooltip显示额外文本也是个办法,但是按你说的,如果内容超多,整个屏幕都放不下,放tooltip里一样放不下啊真的有200个字符,只显示3个,滚动,你得滚动到哪年才能看全啊,滚到后面,前面的忘了必须控制内容在一定范围啊,弄那么长什么控件也一样放不下至于控件处于屏幕最右边,判断一下位置和大小,下拉框往左偏移一点呗,别让下拉框只显示一半不就行了 可以换个思路,当鼠标移到上面再以Tip的方式显示全 或许,你可以用timer控件将comBobox控件的字符串拆成一个一个字绑上去,就有跑马灯的效果吧! 通过自绘Combobox下拉列表以显示多行文本,这样就可以不改变宽度,也不滚动,并且方便快速阅读. winform窗口不弹出问题 word写文本如何控制缩进 动态生成PictrueBox和动态修改/拖动PictrueBox 如何调用一个EXE文件 谁来帮帮我,winform 调用web页面? 如何用c#操作binary字段? 各位大俠,請教dsoframer 刪除文件問題? C#.NET中如何实现折叠菜单按钮 漠漠青蜂来接分啦 - 2 只给出DataTable能更新database吗?(代码) 通过XML配置文件,向Excel模板添加数据~~~ C# 写的Windows服务中调用C++写的消息钩子,调试时钩子安装成功了,但是却不起作用
比如,item【1】的字符为123456,实际上只能显示123,那么点击下拉框时触发自定义的重绘,测量输入字符绘制大小,计算好左移步进, 开启额外线程重绘程序(线程内可以绘制完成,sleep,再计算位置重绘)。当然还有笨方法,自定义一个定时器,时刻一道,把123,变成234,再变成345,直到变为456,最后再变成123。
到不如自己做个自定义控件
上面是文本框+按钮
点按钮下面出现listbox,宽度根据内容调整
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace gundong_Label
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button2.Enabled = false;
} private void timer1_Tick(object sender, EventArgs e)
{
label1.Left -=3; //设置label1左边缘与其容器的工作区左边缘之间的距离
if (label1.Right < 0) //当label1右边缘与其容器的工作区左边缘之间的距离小于0时
{
label1.Left = this.Width; //设置label1左边缘与其容器的工作区左边缘之间的距离为该窗体的宽度
}
}
//开始演示
private void button1_Click(object sender, EventArgs e)
{
timer1.Enabled = true; //开始滚动
button2.Enabled = true;
}
//单击暂停按钮
private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false; //停止滚动
button2.Enabled = false;
}
//退出
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
}
}滚动速度在timer控件的属性中设置。额,贴图比较多,不好意思呀
之所以广告标签看不清楚,那是因为广告类型的原因,而且自己控制滚动的速度在一个合适的范围就能看清楚了啊。还有一个办法,就是使用ToolTip控件 ,额外显示文本。具体可以参考下面的文章,就是给listbox的每个item都设置tooltip或者绑定一个tooltip控件。超出长度时使用tooltip显示全部文本。
ToolTip控件
真的有200个字符,只显示3个,滚动,你得滚动到哪年才能看全啊,滚到后面,前面的忘了
必须控制内容在一定范围啊,弄那么长什么控件也一样放不下至于控件处于屏幕最右边,判断一下位置和大小,下拉框往左偏移一点呗,别让下拉框只显示一半不就行了