WinForm自定义控件扩展

来源:互联网 发布:时时彩源码开奖器 编辑:程序博客网 时间:2024/06/10 14:50

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;
            }
        }
    }

原创粉丝点击