c#中WinForm的TextBox循环自动滚动示例

这个问题来自论坛提问,演示代码如下

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;
using  System.Runtime.InteropServices;
namespace  WindowsApplication27
{
    
///   <summary>
    
///  演示如何在TextBox中让文字循环滚动:
    
///  作者jinjazz
    
///  作者blog: http://blog.csdn.net/jinjazz
    
///   </summary>

     public   partial   class  Form1 : Form
    
{
        
public  Form1()
        
{
            InitializeComponent();

            
this .textBox1.Clear();
            
for  ( int  i  =   0 ; i  <=   20 ;i ++  )
            
{
                
this .textBox1.Text  +=   string .Format( " {0}:jinjazz__{1} " , i,i);
            }

            
this .timer1.Interval  =   200 ;
            
this .timer1.Start();
        }


        
// 发送消息
        [DllImport( " user32.dll " , EntryPoint  =   " SendMessage " )]
        
public   static   extern   int  SendMessage(IntPtr hWnd,  int  wMsg,  int  wParam,  int  lParam);
        
// 获取滚动条位置
        [DllImport( " user32 " )]
        
public   static   extern   int  GetScrollPos(IntPtr hwnd,  int  nBar);
        
// 设置滚动条位置
        [DllImport( " user32.dll " )]
        
static   extern   int  SetScrollPos(IntPtr hWnd,  int  nBar,
                                       
int  nPos,  bool  bRedraw);

        
public   const   int  EM_LINESCROLL  =   0xb6 ;
 
        
private   void  timer1_Tick( object  sender, EventArgs e)
        
{
            
int  i =   GetScrollPos( this .textBox1.Handle, 1 );

            
// 向下滚动一行
            SendMessage( this .textBox1.Handle, EM_LINESCROLL,  0 1 ); // 0,1代表垂直滚动条向下滚动

            
// 判断是否有位置变化,如果没有则说明到了底部,返回开始处
             if  (i  ==  GetScrollPos( this .textBox1.Handle,  1 ))
            
{
                
// 回到顶部,这里用SetScrollPos似乎有问题,滚动条和文字不是同步更新
                 this .textBox1.SelectionStart  =   0 ;
                
this .textBox1.SelectionLength  =   1 ;
                
this .textBox1.ScrollToCaret();
                
this .textBox1.SelectionLength  =   0 ;
            }

            Console.WriteLine(i);
        }


        
private   void  textBox1_MouseEnter( object  sender, EventArgs e)
        
{
            
this .timer1.Stop();
        }


        
private   void  textBox1_MouseLeave( object  sender, EventArgs e)
        
{
            
this .timer1.Start();
        }

    }

}
原文地址:https://www.cnblogs.com/cl1024cl/p/6204942.html