using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;namespace WindowsApplication { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { myListBox1.Items.Add("1"); myListBox1.Items.Insert(0,"1"); myListBox1.Items.RemoveAt(0); } private void myListBox1_CollectionChanged(object sender, EventArgs e) { MessageBox.Show(myListBox1.Items.Count.ToString()); } } public class MyListBox : ListBox { private const int LB_ADDSTRING = 0x180; private const int LB_INSERTSTRING = 0x181; private const int LB_DELETESTRING = 0x182; public event EventHandler CollectionChanged; protected override void WndProc(ref Message m) { switch (m.Msg) { case LB_ADDSTRING: case LB_INSERTSTRING: case LB_DELETESTRING: if (CollectionChanged != null) { EventArgs e = new EventArgs(); CollectionChanged(this,e); } break; } base.WndProc(ref m); } } }
C#的API没有提供此类事件!
每个调用的地方都有可能是结尾!
故此方法行不通,因为如果这样的话,我很多地方都要添加这一句if( listBox1.Items.Count>15){你要做的操作}else{}
目前还没有想到比这个更好的办法。
每执行一次Tick就统计一次就可以了!_Tick(object sender, EventArgs e)
{
listBox1.Items.Count>15
}
什么事件呢?
现在不是数的问题,而是我要什么时候去判断这个数是否已经满足15。
这位仁兄还是没明白我的问题,
之所以用Timer是因为这样的话系统就会在固定的时间内去帮我判断是否已经满足15
ListBox的所有事件中,并没有提供什么时候去判断a的数目的实践,例如
有些控件CheckBox有一个事件叫做CheckedChanged()每次checkBox的状态改变,它就会自动触发执行这个事件。
同理我也需要ListBox数量变化的时候有提供一个事件可以自动触发。但是可惜没有!
所有控件都是继承Control类
但是可惜没有找到基类的Add方法,没有办法重写咯!
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsApplication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
myListBox1.Items.Add("1");
myListBox1.Items.Insert(0,"1"); myListBox1.Items.RemoveAt(0);
} private void myListBox1_CollectionChanged(object sender, EventArgs e)
{
MessageBox.Show(myListBox1.Items.Count.ToString());
}
} public class MyListBox : ListBox
{
private const int LB_ADDSTRING = 0x180;
private const int LB_INSERTSTRING = 0x181;
private const int LB_DELETESTRING = 0x182; public event EventHandler CollectionChanged; protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case LB_ADDSTRING:
case LB_INSERTSTRING:
case LB_DELETESTRING:
if (CollectionChanged != null)
{
EventArgs e = new EventArgs();
CollectionChanged(this,e);
}
break; } base.WndProc(ref m);
}
}
}