解决方案 »

  1.   

    在winform下实现是相当繁锁的,那些做控件的sb自以为自己的控件很牛B,其实跟客户的需要差远了
      

  2.   

    http://www.codeproject.com/Articles/1030/A-CListBox-with-automatic-HSCROLL-maintenance 看看这个
      

  3.   

    我觉得加上额外的线程定时重绘指定区域效果应该是最好的了。
    比如,item【1】的字符为123456,实际上只能显示123,那么点击下拉框时触发自定义的重绘,测量输入字符绘制大小,计算好左移步进, 开启额外线程重绘程序(线程内可以绘制完成,sleep,再计算位置重绘)。当然还有笨方法,自定义一个定时器,时刻一道,把123,变成234,再变成345,直到变为456,最后再变成123。
      

  4.   

    我觉得这个思路怪费劲的
    到不如自己做个自定义控件
    上面是文本框+按钮
    点按钮下面出现listbox,宽度根据内容调整
      

  5.   

    就是控件的长文本滚动显示嘛,使用一个定时器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控件的属性中设置。额,贴图比较多,不好意思呀
      

  6.   

    7#,你这个是针对Label控件做的,有没有针对Combo box控件做的呢?谢谢
      

  7.   

    根据内容调整,这也不符合页面设计吧,如果一个子项文字太长,那么listbox将会很宽,整体页面允许吗?而且文字长度超过屏幕,怎么办?怎么调整也无法一行显示完全的。除非换行,缩小字体。
    之所以广告标签看不清楚,那是因为广告类型的原因,而且自己控制滚动的速度在一个合适的范围就能看清楚了啊。还有一个办法,就是使用ToolTip控件 ,额外显示文本。具体可以参考下面的文章,就是给listbox的每个item都设置tooltip或者绑定一个tooltip控件。超出长度时使用tooltip显示全部文本。
    ToolTip控件 
      

  8.   

    没做过Combo box的滚动哦,我也只是知道有这种实现而已。不过使用方法和属性都差不多的,可以自己试验下。刚刚想到了,就像12#那样,用tooltip显示全部文字应该是最简单的了。改变宽度,使用控件自动调整,将会对整体布局产生不可预测的影响,特别是控件多的时候。唉
      

  9.   

    用tooltip显示额外文本也是个办法,但是按你说的,如果内容超多,整个屏幕都放不下,放tooltip里一样放不下啊
    真的有200个字符,只显示3个,滚动,你得滚动到哪年才能看全啊,滚到后面,前面的忘了
    必须控制内容在一定范围啊,弄那么长什么控件也一样放不下至于控件处于屏幕最右边,判断一下位置和大小,下拉框往左偏移一点呗,别让下拉框只显示一半不就行了
      

  10.   

    可以换个思路,当鼠标移到上面再以Tip的方式显示全
      

  11.   

    或许,你可以用timer控件将comBobox控件的字符串拆成一个一个字绑上去,就有跑马灯的效果吧!
      

  12.   

    通过自绘Combobox下拉列表以显示多行文本,这样就可以不改变宽度,也不滚动,并且方便快速阅读.