ListBox自动滚动并限制显示条数

1、实现功能

限制ListBox显示的最大条数;

ListBox自动滚动,显示最新行;

2、C#代码

csharp 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.ProgressBar;

namespace ListBoxApp
{
    public partial class Form1 : Form
    {
        Timer timer;
        bool isRun = false;
        int count = 0;
        int MAX_COUNT = 20;
        string filename = "";
        /// <summary>
        /// 构造函数
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 窗体加载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            timer = new Timer();
            timer.Interval = 500;
            timer.Tick += Timer_Tick;
            timer.Start();
        }
        /// <summary>
        /// 定时处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Timer_Tick(object sender, EventArgs e)
        {
            if (isRun)
            {
                string str = $"No. {count} item";
                ListBoxSaveAndAdd(filename,listBox1, str, MAX_COUNT);
                count++;
            }
        }
        /// <summary>
        /// 测试开启和停止
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btStart_Click(object sender, EventArgs e)
        {
            if (btStart.Text.Equals("开始"))
            {
                btStart.Text = "停止";
                listBox1.Items.Clear();
                filename = Path.Combine(Environment.CurrentDirectory, "f"+DateTime.Now.ToString("yyyyMMdd_HHmmssFFF")+".txt");
                count = 0;
                isRun = true;
            }
            else
            {
                btStart.Text = "开始";
                isRun = false;
            }
        }

        #region 处理算法
        /// <summary>
        /// 数据保存和ListBox添加
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="listBox"></param>
        /// <param name="text"></param>
        /// <param name="maxCount"></param>
        public static void ListBoxSaveAndAdd(string filename, ListBox listBox, string text, int maxCount)
        {
            FileStreamWriter(filename, text);
            ListBoxScrollAddCross(listBox, text, maxCount);
        }
        /// <summary>
        /// 文件保存
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="content"></param>
        public static void FileStreamWriter(string filename, string content)
        {
            using (StreamWriter sw = new StreamWriter(filename, true))
            {
                sw.WriteLine(content);
            }
        }
        /// <summary>
        /// listBox跨域处理
        /// </summary>
        /// <param name="listBox"></param>
        /// <param name="text"></param>
        /// <param name="maxCount"></param>
        public static void ListBoxScrollAddCross(ListBox listBox, string text, int maxCount)
        {
            if (listBox.InvokeRequired)
            {
                MethodInvoker mi = delegate ()
                {
                    ListBoxScrollAdd(listBox, text, maxCount);
                };
                listBox.Invoke(mi);
            }
            else
            {
                ListBoxScrollAdd(listBox, text, maxCount);
            }
        }
        /// <summary>
        /// listBox添加
        /// </summary>
        /// <param name="listBox"></param>
        /// <param name="text"></param>
        /// <param name="maxCount"></param>
        public static void ListBoxScrollAdd(ListBox listBox, string text, int maxCount)
        {
            listBox.Items.Add(text);
            if (listBox.Items.Count > maxCount)
            {
                listBox.Items.RemoveAt(0);
            }
            listBox.TopIndex = listBox.Items.Count - (int)(listBox.Height / listBox.ItemHeight);
        }
        #endregion
    }
}

3、运行结果

相关推荐
软件黑马王子1 小时前
C#初级教程(4)——流程控制:从基础到实践
开发语言·c#
水煮庄周鱼鱼6 小时前
C# 入门简介
开发语言·c#
软件黑马王子7 小时前
Unity游戏制作中的C#基础(6)方法和类的知识点深度剖析
开发语言·游戏·unity·c#
Nicole Potter8 小时前
请说明C#中的List是如何扩容的?
开发语言·面试·c#
gu209 小时前
c#编程:学习Linq,重几个简单示例开始
开发语言·学习·c#·linq
pchmi13 小时前
CNN常用卷积核
深度学习·神经网络·机器学习·cnn·c#
yuanpan14 小时前
23种设计模式之《组合模式(Composite)》在c#中的应用及理解
开发语言·设计模式·c#·组合模式
滴_咕噜咕噜15 小时前
C#基础总结:常用的数据结构
开发语言·数据结构·c#
万兴丶18 小时前
Unity 适用于单机游戏的红点系统(前缀树 | 数据结构 | 设计模式 | 算法 | 含源码)
数据结构·unity·设计模式·c#
程序猿多布19 小时前
C#设计模式 学习笔记
设计模式·c#