• 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();
            }

        }

    }
  • 相关阅读:
    line-height:150%和line-height:1.5的区别
    javascript: with 表单验证
    CSS实现背景透明,文字不透明,兼容所有浏览器
    关于伪类元素:before和:after
    图片预览实例分享
    微信浏览器取消缓存的方法
    学习笔记(四):jQuery之动画效果
    学习笔记(三):jQuery之DOM
    Git 常用命令
    开发规范(三)数据库 By 阿里
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204942.html
Copyright © 2020-2023  润新知