WinForm自定义控件扩展
2010-02-05 16:17
447 查看
using System;
using System.Drawing;
using System.Windows.Forms;
//msg=0x115 (WM_VSCROLL)
//msg=0x114 (WM_HSCROLL)
/// <summary>
/// CListView 的摘要说明。
/// </summary>
public class CListView : ListView
{
private TextBox m_tb;
public CListView()
{
m_tb = new TextBox();
m_tb.Multiline = true;
m_tb.Visible = false;
this.GridLines = true;
this.CheckBoxes = true;
this.FullRowSelect = true;
this.Controls.Add(m_tb);
}
private void EditItem(int Index)
{
if (this.SelectedItems.Count <= 0)
{
return;
}
ListViewItem item = this.SelectedItems[0];
Rectangle rect = item.Bounds;
Rectangle _rect = new Rectangle(rect.Right - this.Columns[Index].Width, rect.Top, this.Columns[Index].Width, rect.Height);
m_tb.Bounds = _rect;
m_tb.BringToFront();
m_tb.Text = item.SubItems[1].Text;
m_tb.Leave += new EventHandler(tb_Leave);
m_tb.TextChanged += new EventHandler(m_tb_TextChanged);
m_tb.Visible = true;
m_tb.Tag = item;
m_tb.Select();
}
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.F2)
{
EditItem(1);
}
base.OnKeyDown(e);
}
protected override void OnSelectedIndexChanged(EventArgs e)
{
this.m_tb.Visible = false;
base.OnSelectedIndexChanged(e);
}
protected override void OnDoubleClick(EventArgs e)
{
Point tmpPoint = this.PointToClient(Cursor.Position);
ListViewItem item = this.GetItemAt(tmpPoint.X, tmpPoint.Y);
if (item != null)
{
if (tmpPoint.X > this.Columns[0].Width && tmpPoint.X < this.Width)
{
EditItem(1);
}
}
base.OnDoubleClick(e);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x115 || m.Msg == 0x114)
{
this.m_tb.Visible = false;
}
base.WndProc(ref m);
}
private void tb_Leave(object sender, EventArgs e)
{
m_tb.TextChanged -= new EventHandler(m_tb_TextChanged);
(sender as TextBox).Visible = false;
}
private void m_tb_TextChanged(object sender, EventArgs e)
{
if ((sender as TextBox).Tag is ListViewItem)
{
(this.m_tb.Tag as ListViewItem).SubItems[1].Text = this.m_tb.Text;
}
}
}
using System.Drawing;
using System.Windows.Forms;
//msg=0x115 (WM_VSCROLL)
//msg=0x114 (WM_HSCROLL)
/// <summary>
/// CListView 的摘要说明。
/// </summary>
public class CListView : ListView
{
private TextBox m_tb;
public CListView()
{
m_tb = new TextBox();
m_tb.Multiline = true;
m_tb.Visible = false;
this.GridLines = true;
this.CheckBoxes = true;
this.FullRowSelect = true;
this.Controls.Add(m_tb);
}
private void EditItem(int Index)
{
if (this.SelectedItems.Count <= 0)
{
return;
}
ListViewItem item = this.SelectedItems[0];
Rectangle rect = item.Bounds;
Rectangle _rect = new Rectangle(rect.Right - this.Columns[Index].Width, rect.Top, this.Columns[Index].Width, rect.Height);
m_tb.Bounds = _rect;
m_tb.BringToFront();
m_tb.Text = item.SubItems[1].Text;
m_tb.Leave += new EventHandler(tb_Leave);
m_tb.TextChanged += new EventHandler(m_tb_TextChanged);
m_tb.Visible = true;
m_tb.Tag = item;
m_tb.Select();
}
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.F2)
{
EditItem(1);
}
base.OnKeyDown(e);
}
protected override void OnSelectedIndexChanged(EventArgs e)
{
this.m_tb.Visible = false;
base.OnSelectedIndexChanged(e);
}
protected override void OnDoubleClick(EventArgs e)
{
Point tmpPoint = this.PointToClient(Cursor.Position);
ListViewItem item = this.GetItemAt(tmpPoint.X, tmpPoint.Y);
if (item != null)
{
if (tmpPoint.X > this.Columns[0].Width && tmpPoint.X < this.Width)
{
EditItem(1);
}
}
base.OnDoubleClick(e);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x115 || m.Msg == 0x114)
{
this.m_tb.Visible = false;
}
base.WndProc(ref m);
}
private void tb_Leave(object sender, EventArgs e)
{
m_tb.TextChanged -= new EventHandler(m_tb_TextChanged);
(sender as TextBox).Visible = false;
}
private void m_tb_TextChanged(object sender, EventArgs e)
{
if ((sender as TextBox).Tag is ListViewItem)
{
(this.m_tb.Tag as ListViewItem).SubItems[1].Text = this.m_tb.Text;
}
}
}
相关文章推荐
- WinForm自定义控件–TextBox扩展
- Android自定义控件---继承ProgressBar功能扩展
- winform自定义控件
- WinForm自定义控件开发(1)
- Android自定义控件扩展示例
- C# WinForm控件美化扩展系列之TabControl控件(3)-完整版
- WinForm自定义控件一
- 关于WinForm自定义控件添加的问题
- Winform自定义控件实例
- Asp.net_自定义控件2_自动完成扩展_增加选中事件
- winform 自定义控件-按钮
- 自定义控件(HolyrongGridView)-扩展GridView控件(3):自定义排序
- 扩展WinForm的ComboBox
- C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
- winform自定义控件 已经空间属性下拉选择制作
- Winform中扩展Panel使之具备双缓存,防止闪屏
- c# 扩展方法奇思妙用高级篇六:WinForm 控件选择器
- 【WinForm】自定义控件(进度控制条)
- Winform下ToolStrip承载自定义控件或 Windows 窗体控件。
- C# WinForm 自定义控件,DataGridView背景透明,TabControl背景透明