程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c#中WinForm的TextBox循環自動滾動示例

c#中WinForm的TextBox循環自動滾動示例

編輯:關於C語言

這個問題來自論壇提問,演示代碼如下

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved