winform 下拉框(改造winform的listview控件内置下拉框和文本框编辑功能)

  • A+

一直以来winform的listview都只是作为数据输出显示来用, 想要实现数据的双向操作比较难

之前都需要用其他表格类控件实现这个双击编辑文本,双击实现下拉列表框选择文本功能, 而且其中有很大一部分是ocx组件,

那么就需要在客户电脑上regsvr32 注册它, 这样就需要管理员权限, 这样操作并不是很好,

于是考虑着手动改造listview使其满足我的需求.

还好, aardio范例里有个数据视图win.ui.grid的库可供参考, 我就是根据这个库内的实现方法来升级改造的.

下面我在原listview grid基础上增加了, 双击指定列 可直接编辑文本 / 弹出下拉框选择文本功能.

listviewEX.aardio 库代码如下:

//listview 扩展importwin.ui.ctrl.edit; importwin.ui.ctrl.combobox; namespace win.ui; classlistviewEx{ ctor( listview ){ this= listview; this.fullRow = 1; this.gridLines = 1; this.columnsEditbox = {};//记录编辑框列号this.columnsCombobox = {};//记录下拉框列号和列表值//添加下拉框模板this.addCtrl( combobox = { cls="combobox";font = LOGFONT( h = -19);left = 0;top = 0; right = 50;bottom = 50;autoResize = false;hide = 1;edge = 1;mode="dropdownlist"; wndproc = function( hwnd, message, wParam, lParam ){ varupdate; varevent = owner.event; if( message == 308) { update = true; } if( update ){ owner.show(false); vart = this.getItemText(event.iItem,event.iSubItem ); if( t!= owner.text ){ if( this.onEditChanged ) { if( false=== this.onEditChanged(owner.text, event.iItem, event.iSubItem)) return; } this.setItemText( owner.text, event.iItem, event.iSubItem ); } if(this.onEditEnd){ this.onEditEnd(event.iItem, event.iSubItem); } } } } ); //添加编辑框模板this.addCtrl( editBox = { cls="edit";font = LOGFONT( h = -19);left = 0;top = 0; right = 50;bottom = 50;autoResize = false;hide = 1;edge = 1; wndproc = function( hwnd, message, wParam, lParam ){ varupdate; varevent = owner.event; if( ( message = 0x8/*_WM_KILLFOCUS*/) || (message == 0x101/*_WM_KEYUP*/