欢迎光临
我们一直在努力

WinForm中类似WebForm中的CheckBoxList控件-.NET教程,组件控件开发

建站超值云服务器,限时71元/月

前些天,在.net技术的论坛里面看到了有个帖子,我好像记得是怎么实现winform中类似webform中的checkboxlist控件,我简单的实现了那样的一个控件

首先,你得建立一个控件项目,假如说是:

接着,你就添加一个类: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,具体很多还有其它的功能没有加上,希望网友指正,添加更多功能

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » WinForm中类似WebForm中的CheckBoxList控件-.NET教程,组件控件开发
分享到: 更多 (0)