using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace LYFZ.ComponentLibrary
{
    public partial class ComboBoxTextEx : UserControl
    {
        public ComboBoxTextEx()
        {
            InitializeComponent();
        }

        #region 属性
        DataTable _Bindtable;
        /// <summary>
        /// 要绑定数据
        /// </summary>
        public DataTable Bindtable
        {
            get { return _Bindtable; }
            set
            {
                _Bindtable = value;
                int an = txtValue.Height;
                TextComboBoxExLoad();
            }
        }
        string _ShowName;
        /// <summary>
        /// 要显示的字段
        /// </summary>
        public string ShowName
        {
            get { return _ShowName; }
            set
            {
                _ShowName = value;
                TextComboBoxExLoad();
            }
        }

        string _Text;
        /// <summary>
        /// 选择后返回的值
        /// </summary>
        public override string Text
        {
            get { return _Text; }
            set { _Text = value; }
        }

        int _LstBoxHeiht;
        public int LstBoxHeiht
        {
            get { return _LstBoxHeiht; }
            set { _LstBoxHeiht = value; }
        }
        #endregion
        
        #region 属性重写   
        [Category("控件扩展属性"), Description("设置控件中文本字体")]
        public new Font Font
        {
            get
            {
                return txtValue.Font;
            }
            set
            {
                txtValue.Font = value;
                lstboxData.Font = txtValue.Font;
                OnResize(null);
                Invalidate(false);
            }
        }
        
        /// <summary>
        /// 禁止调整大小
        /// </summary>
        /// <param name="e"></param>
        protected override void OnResize(EventArgs e)
        {
            if (lstboxData.Visible == true)
            {
                this.Height = txtValue.Height + lstboxData.Height;
                if (LstBoxHeiht > lstboxData.Font.Height)
                {
                    lstboxData.Height = LstBoxHeiht;
                }
            }
            else
            {
                this.Height = txtValue.Height;
                btnOpenDrop.Width = this.Height;
                btnOpenDrop.Height = this.Height;
                btnOpenDrop.Location = new Point(this.Width - this.Height, 0);
                txtValue.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
                txtValue.Width = this.Width - btnOpenDrop.Width;
                this.Width = txtValue.Width + btnOpenDrop.Width;

                lstboxData.Height = lstboxData.Font.Height; ;
                lstboxData.Width = this.Width - 1;
                lstboxData.Location = new Point(0, txtValue.Height - 1);
                lstboxData.BorderStyle = BorderStyle.None;
                lstboxData.BackColor = Color.FromArgb(238, 238, 238);
                lstboxData.Visible = false;
            }

        }
        #endregion
        
        /// <summary>
        /// 窗体加载事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ComboBoxTextEx_Load(object sender, EventArgs e)
        {
        }

        /// <summary>
        /// 给列表画值
        /// </summary>
        private void TextComboBoxExLoad()
        {
            txtValue.Text = "";
            Text = "";
            lstboxData.Items.Clear();
            lstboxData.Items.Add("");
            LstBoxHeiht = lstboxData.Font.Height;
            if (Bindtable != null && ShowName != null && ShowName != "")
            {
                if (Bindtable.Rows.Count > 0)
                {
                    for (int i = 0; i < Bindtable.Rows.Count; i++)
                    {
                        LstBoxHeiht += lstboxData.Font.Height;
                        lstboxData.Items.Add(Bindtable.Rows[i][ShowName].ToString());
                    }
                }
            }
        }

        /// <summary>
        /// 按钮的点击
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOpenDrop_Click(object sender, EventArgs e)
        {
            if (lstboxData.Visible)
            {
                lstboxData.Visible = false;
                this.Height = btnOpenDrop.Height;
            }
            else
            {
                TextComboBoxExLoad();
                this.BringToFront();
                lstboxData.Visible = true;
                OnResize(null);
            }
        }

        /// <summary>
        /// 列表选择事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lstboxData_SelectedIndexChanged(object sender, EventArgs e)
        {
            Text = lstboxData.Items[lstboxData.SelectedIndex].ToString();
            txtValue.Text = Text;

            lstboxData.Visible = false;
            this.Size = new Size(txtValue.Width + btnOpenDrop.Width, txtValue.Height);
        }

        private void lstboxData_Leave(object sender, EventArgs e)
        {
            txtValue_Leave(null, null);
        }

        private void txtValue_Leave(object sender, EventArgs e)
        {
            if (lstboxData.Visible == true)
            {
                lstboxData.Visible = false;
                this.Height = btnOpenDrop.Height;
            }
        }


    }
}