WinForm中类似WebForm中的CheckBoxList控件
点击次数:18 次 发布日期:2008-11-26 23:57:55 作者:源代码网
|
源代码网推荐 源代码网推荐首先,你得建立一个控件项目,假如说是: 源代码网推荐 源代码网推荐接着,你就添加一个类:CheckBoxCollection,它是个CheckBox的集合类 源代码网推荐 源代码网推荐具体的代码如下 源代码网推荐 源代码网推荐CheckBoxCollection.cs 源代码网推荐 源代码网推荐using System; 源代码网推荐using System.Collections; 源代码网推荐using System.Windows.Forms; 源代码网推荐 源代码网推荐namespace CheckListControl 源代码网推荐{ 源代码网推荐 /// <summary> 源代码网推荐 /// CheckBox的集合类 源代码网推荐 /// </summary> 源代码网推荐 public class CheckBoxCollection:System.Collections.CollectionBase 源代码网推荐 { 源代码网推荐 public CheckBoxCollection() 源代码网推荐 { 源代码网推荐 IList pIList=base.List; 源代码网推荐 } 源代码网推荐 源代码网推荐 public CheckBox this[int index] 源代码网推荐 { 源代码网推荐 get 源代码网推荐 { 源代码网推荐 return (CheckBox) List[index]; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 public CheckBox Add(CheckBox obj) 源代码网推荐 { 源代码网推荐 base.List.Add(obj); 源代码网推荐 return obj; 源代码网推荐 } 源代码网推荐 源代码网推荐 public void Remove(CheckBox obj) 源代码网推荐 { 源代码网推荐 base.List.Remove(obj); 源代码网推荐 } 源代码网推荐 } 源代码网推荐} 源代码网推荐 源代码网推荐 源代码网推荐然后,在CheckBoxList.cs文件中,定义全局变量 源代码网推荐 源代码网推荐private CheckBoxCollection objCbc=new CheckBoxCollection(); 源代码网推荐 源代码网推荐 public event System.EventHandler CheckedChanged; 源代码网推荐 源代码网推荐写自定义函数,外部接口 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐/// <summary> 源代码网推荐 /// 新增一个CheckBox到控件 源代码网推荐 /// </summary> 源代码网推荐 /// <returns></returns> 源代码网推荐 public CheckBox NewCheckBox() 源代码网推荐 { 源代码网推荐 lab.Visible=false; 源代码网推荐 CheckBox cb=new CheckBox(); 源代码网推荐 cb.Name=GetName(); 源代码网推荐 cb.Text=cb.Name; 源代码网推荐// cb.Size=new Size(120,24); 源代码网推荐 cb.Checked=false; 源代码网推荐 cb.Visible=true; 源代码网推荐 cb.CheckedChanged+=new EventHandler(CheckBox_CheckedChanged);//定义CheckedChanged事件,来捕捉它的事件 源代码网推荐 int y=0; 源代码网推荐 y=objCbc.Count * 24 + objCbc.Count * 8 + 12;//形成CheckBox的纵坐标 源代码网推荐 cb.Location=new Point(12,y); 源代码网推荐 objCbc.Add(cb); 源代码网推荐 源代码网推荐 this.Controls.Add(cb);//添加CheckBox到控件 源代码网推荐 源代码网推荐 int x=GetMaxWidth();//得到已经添加的CheckBox中的最大的宽度 源代码网推荐 源代码网推荐 if(cb.Width >x )//如果现在添加的CheckBox的最大宽度大于已经添加的最大宽度,替换调x 源代码网推荐 { 源代码网推荐 x = cb.Width + 24; 源代码网推荐 } 源代码网推荐 源代码网推荐 this.Size=new Size(x ,y +12+24);//根据添加的CheckBox改变控件的大小 源代码网推荐 源代码网推荐 return cb; 源代码网推荐 } 源代码网推荐 源代码网推荐 /// <summary> 源代码网推荐 /// 自动形成新添加CheckBox的名称 源代码网推荐 /// </summary> 源代码网推荐 /// <returns></returns> 源代码网推荐 private string GetName() 源代码网推荐 { 源代码网推荐 if(objCbc.Count>0) 源代码网推荐 { 源代码网推荐 ArrayList list=new ArrayList(); 源代码网推荐 for(int i=0;i<objCbc.Count;i++) 源代码网推荐 { 源代码网推荐 if(objCbc[i].Name.Trim().Length==9) 源代码网推荐 { 源代码网推荐 string str=objCbc[i].Name.Trim(); 源代码网推荐 if(str.Substring(0,8).ToLower()=="checkbox" && IsNumber(str.Substring(str.Length-1,1))) 源代码网推荐 { 源代码网推荐 list.Add(str.Substring(str.Length-1,1)); 源代码网推荐 } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 if(list.Count>0) 源代码网推荐 { 源代码网推荐 return "checkBox" + Convert.ToString(int.Parse(list[list.Count-1].ToString().Trim()) + 1); 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 return "checkBox1"; 源代码网推荐 } 源代码网推荐 源代码网推荐 /// <summary> 源代码网推荐 /// 判断是否是阿拉伯数字 源代码网推荐 /// </summary> 源代码网推荐 /// <param name="strCompare"></param> 源代码网推荐 /// <returns></returns> 源代码网推荐 private bool IsNumber(string strCompare) 源代码网推荐 { 源代码网推荐 string strWord="0123456789"; 源代码网推荐 foreach(char chr in strWord) 源代码网推荐 { 源代码网推荐 if(strCompare==chr.ToString()) 源代码网推荐 { 源代码网推荐 return true; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 return false; 源代码网推荐 } 源代码网推荐 源代码网推荐 /// <summary> 源代码网推荐 /// 得到已经添加CheckBox中的最大宽度 源代码网推荐 /// </summary> 源代码网推荐 /// <returns></returns> 源代码网推荐 private int GetMaxWidth() 源代码网推荐 { 源代码网推荐 int maxWidth=0; 源代码网推荐 if(objCbc.Count>0) 源代码网推荐 { 源代码网推荐 for(int i=0;i<objCbc.Count;i++) 源代码网推荐 { 源代码网推荐 CheckBox cb=(CheckBox)objCbc[i]; 源代码网推荐 if(cb.Width>maxWidth) 源代码网推荐 { 源代码网推荐 maxWidth=cb.Width; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 return maxWidth; 源代码网推荐 } 源代码网推荐 源代码网推荐// [Browsable(true), Description("得到CheckBox集合"), Category("CheckList")] 源代码网推荐// public CheckBoxCollection CheckList 源代码网推荐// { 源代码网推荐// get 源代码网推荐// { 源代码网推荐// return objCbc; 源代码网推荐// } 源代码网推荐// } 源代码网推荐 源代码网推荐 private void CheckBox_CheckedChanged(object sender, EventArgs e) 源代码网推荐 { 源代码网推荐 CheckedChanged(sender,new EventArgs()); 源代码网推荐 } 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐编译以后,就可以得到CheckListControl.dll; 源代码网推荐 源代码网推荐添加新项目用于类的测试 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐在工具箱中->添加/移除项,把CheckListControl添加进来,然后拖CheckListControl到Form1中 源代码网推荐 源代码网推荐form1.cs中 源代码网推荐 源代码网推荐private void Form1_Load(object sender, System.EventArgs e) 源代码网推荐 { 源代码网推荐 CheckBox cb=checkBoxList1.NewCheckBox(); 源代码网推荐 cb.Name="chkFirst"; 源代码网推荐 cb.Text="第一个CheckBox"; 源代码网推荐 cb.Size=new Size(125,24); 源代码网推荐 cb=checkBoxList1.NewCheckBox(); 源代码网推荐 cb.Name="chkSecond"; 源代码网推荐 cb.Text="第二个CheckBox"; 源代码网推荐 cb.Size=new Size(125,24); 源代码网推荐 } 源代码网推荐 源代码网推荐 private void checkBoxList1_CheckedChanged(object sender, System.EventArgs e) 源代码网推荐 { 源代码网推荐 CheckBox cb=(CheckBox)sender; 源代码网推荐 MessageBox.Show("Name: " + cb.Name + " Text: " +cb.Text); 源代码网推荐 } 源代码网推荐 源代码网推荐具体的就这样 源代码网推荐 源代码网推荐其实,只是作了简单的一个CheckBoxList,具体很多还有其它的功能没有加上,希望网友指正,添加更多功能 源代码网推荐 源代码网供稿. |
