C# 让ListBox可编辑
来源:互联网 发布:perl语言编程 编辑:程序博客网 时间:2024/05/31 15:18
正常情况下,.Net自带的ListBox是无法进行编辑的,欲让它可编辑,我们可添加一个隐藏的文本编辑框,当双击项的时候显示编辑框,更新项内容后隐藏编辑框即可。
欲调整ListBox每个项的高度,ListBox有一个自带属性ItemHeight,于是我们很自然的就设这个属性值,结果却发现改不动,改后又返回默认值12,后面才发现要使该属性值有效更改,必须将DrawMode属性设为OwnerDrawFixed,并且为ListBox添加DrawItem事件:
- private void listBox1_DrawItem( object sender , DrawItemEventArgs e )
- {
- e.DrawBackground( );
- e.DrawFocusRectangle( );
- e.Graphics.DrawString( listBox1.Items[e.Index].ToString( ) , e.Font , new SolidBrush( e.ForeColor ) , e.Bounds );
- }
经过这样的控制后,设计界面中的ListBox项看不到了,但没关系,运行的时候是可见的,而且每个项的高度确实作了有效更改。
接下来我们为ListBox再添几个事件来控制编辑框的显示,其实就两个:DoubleClick和MouseClick。好了,在添加之前我们在全局区定义一个编辑框txtEdit,并在构造函数为其添加KeyDown事件:
- TextBox txtEdit = new TextBox( );
- /// <summary>
- /// 构造函数
- /// </summary>
- public Form1()
- {
- InitializeComponent();
- txtEdit.KeyDown += new KeyEventHandler( txtEdit_KeyDown );
- }
- /// <summary>
- /// KeyDown事件定义
- /// </summary>
- private void txtEdit_KeyDown( object sender , KeyEventArgs e )
- {
- //Enter键 更新项并隐藏编辑框
- if ( e.KeyCode == Keys.Enter )
- {
- listBox1.Items[listBox1.SelectedIndex] = txtEdit.Text;
- txtEdit.Visible = false;
- }
- //Esc键 直接隐藏编辑框
- if ( e.KeyCode == Keys.Escape )
- txtEdit.Visible = false;
- }
- /// <summary>
- /// 双击项时显示编辑框
- /// </summary>
- private void listBox1_DoubleClick( object sender , EventArgs e )
- {
- int itemSelected = listBox1.SelectedIndex;
- string itemText = listBox1.Items[itemSelected].ToString( );
- Rectangle rect = listBox1.GetItemRectangle( itemSelected );
- txtEdit.Parent = listBox1;
- txtEdit.Bounds = rect;
- txtEdit.Multiline = true;
- txtEdit.Visible = true;
- txtEdit.Text = itemText;
- txtEdit.Focus( );
- txtEdit.SelectAll( );
- }
- /// <summary>
- /// 点击其它项 隐藏编辑框
- /// </summary>
- private void listBox1_MouseClick( object sender , MouseEventArgs e )
- {
- txtEdit.Visible = false;
- }
经过这样的处理后,我们看看最终的效果:
- C# 让ListBox可编辑
- C# 让ListBox可编辑
- 让DIV可编辑
- 让下拉列表可编辑
- 如何让DIV可编辑、可拖动
- 如何让DIV可编辑、可拖动
- 如何让DIV可编辑、可拖动
- C#如何让Listbox支持多选
- C# DataGridView combobox可编辑
- 怎样让你的表格可编辑???
- 怎样让你的表格可编辑???
- vc中让列表框可编辑
- 如何让DIV可编辑、可拖动示例代码
- C#中让ListBox支持文件路径的拖放
- C# 让ListBox控件的项显示图标
- C#让ListBox适应最大Item的宽度
- C# DataGridView combobox可编辑+自行绑定
- C# WinForm WebBrowser 可编辑模式
- 排序算法模板(C语言版) By LYLtim
- 用户控件 委托事件
- Ehcache 下 用jgroup进行复制,Ehcache集群
- POJ1637 Sightseeing tour(混合欧拉图的判断)
- smp865x广告机之QT移植及优化
- C# 让ListBox可编辑
- 在ListView上显示带有图片的提示信息
- LINUX C 获取文件类型 以及访问权限
- C/C++的一些预定义宏
- 亲爱的 我们可以不吵架
- 垂直随意对齐文本
- C# Socket连接请求超时机制
- Struts+Servlet简单实现登录验证码
- Object的方法equals,hashCode,toString,clone。另外Comparable接口的方法