zoukankan      html  css  js  c++  java
  • 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();
            }

        }

    }
  • 相关阅读:
    2014年工作中遇到的20个问题:120-140
    迷茫与飞跃:9月开始,明确了研究方向,功力提升明显,成绩比较显著
    迷茫与飞跃:9月开始,明确了研究方向,功力提升明显,成绩比较显著
    Freemarker中的日期转换
    Freemarker中的日期转换
    Java实现统计方案
    Java实现统计方案
    Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers
    Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers
    Java实现【USACO】1.1.2 贪婪的礼物送礼者 Greedy Gift Givers
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204942.html
Copyright © 2011-2022 走看看