Esempio n. 1
0
 /// <summary>
 /// 当 CheckedListBox 失去输入焦点的时候,需要作的处理。
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void lst_LostFocus(object sender, EventArgs e)
 {
     // 失去输入焦点
     // 那么把自己隐藏起来.
     lst.Hide();
     // 设置本控件的内部标志.
     this.lstShowFlag = CheckedListBoxShowMode.LostFocus;
     // 设置 最后的失去焦点的时间.
     lastLostFocusDateTime = DateTime.Now;
 }
Esempio n. 2
0
 /// <summary>
 /// 当 CheckedListBox 失去输入焦点的时候,需要作的处理。
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void lst_LostFocus(object sender, EventArgs e)
 {
     // 失去输入焦点
     // 那么把自己隐藏起来.
     lst.Hide();
     // 设置本控件的内部标志.
     this.lstShowFlag = CheckedListBoxShowMode.LostFocus;
     // 设置 最后的失去焦点的时间.
     lastLostFocusDateTime = DateTime.Now;
 }
Esempio n. 3
0
        /// <summary>
        /// 打开选项列表,刷新下来菜单
        /// </summary>
        /// <param name="e"></param>
        protected override void OnDropDown(EventArgs e)
        {
            if (lst.Items.Count == 0)
            {
                // 假如数据还没有加载
                // 那么加载.

                lst.BeginUpdate();
                for (int i = 0; i < this.CheckAbleItemList.Count; i++)
                {
                    lst.Items.Add(this.CheckAbleItemList[i]);
                }
                lst.EndUpdate();

                lst.ItemHeight  = this.ItemHeight;
                lst.BorderStyle = BorderStyle.FixedSingle;
                lst.Size        = new Size(this.DropDownWidth, this.ItemHeight * (this.MaxDropDownItems - 1) - (int)this.ItemHeight / 2);
                lst.Location    = new Point(this.Left, this.Top + this.ItemHeight + 6);

                this.Parent.Controls.Add(lst);

                // 加这句话的目的, 是为了避免 控件被别的控件挡住.
                lst.BringToFront();
            }

            if (lstShowFlag == CheckedListBoxShowMode.Hide)
            {
                // 当前未显示,调整为显示.
                lst.Show();
                lst.Focus();

                lstShowFlag = CheckedListBoxShowMode.Show;
            }
            else if (lstShowFlag == CheckedListBoxShowMode.Show)
            {
                // 当前已显示,调整为不显示.
                lst.Hide();
                lstShowFlag = CheckedListBoxShowMode.Hide;
            }
            else if (lstShowFlag == CheckedListBoxShowMode.LostFocus)
            {
                // 当前是 CheckedListBox 失去输入焦点.

                // 对于失去焦点的情况.
                // 需要作判断
                // 因为 可能是点到其它的控件,而  CheckedListBox 失去输入焦点.
                // 也可能是 直接从 CheckedListBox 点到本控件.

                if (DateTime.Now.AddMilliseconds(-250) > lastLostFocusDateTime)
                {
                    // 如果 CheckedListBox 失去焦点的时间
                    // 与本次点击下拉列表的时间
                    // 间隔超过 250 毫秒
                    // 认为是 经过了另外一个控件.
                    // 现在点击回来了,需要显示.
                    lst.Show();
                    lst.Focus();

                    lstShowFlag = CheckedListBoxShowMode.Show;
                }
                else
                {
                    // 是直接从 CheckedListBox 失去焦点
                    // 然后再点击了 本 ComboBox 控件.
                    lstShowFlag = CheckedListBoxShowMode.Hide;
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 打开选项列表,刷新下来菜单
        /// </summary>
        /// <param name="e"></param>
        protected override void OnDropDown(EventArgs e)
        {
            if (lst.Items.Count == 0)
            {
                // 假如数据还没有加载
                // 那么加载.

                lst.BeginUpdate();
                for (int i = 0; i < this.CheckAbleItemList.Count; i++)
                {
                    lst.Items.Add(this.CheckAbleItemList[i]);
                }
                lst.EndUpdate();

                lst.ItemHeight = this.ItemHeight;
                lst.BorderStyle = BorderStyle.FixedSingle;
                lst.Size = new Size(this.DropDownWidth, this.ItemHeight * (this.MaxDropDownItems - 1) - (int)this.ItemHeight / 2);
                lst.Location = new Point(this.Left, this.Top + this.ItemHeight + 6);

                this.Parent.Controls.Add(lst);

                // 加这句话的目的, 是为了避免 控件被别的控件挡住.
                lst.BringToFront();
            }

            if (lstShowFlag == CheckedListBoxShowMode.Hide)
            {
                // 当前未显示,调整为显示.
                lst.Show();
                lst.Focus();

                lstShowFlag = CheckedListBoxShowMode.Show;
            }
            else if (lstShowFlag == CheckedListBoxShowMode.Show)
            {
                // 当前已显示,调整为不显示.
                lst.Hide();
                lstShowFlag = CheckedListBoxShowMode.Hide;
            }
            else if (lstShowFlag == CheckedListBoxShowMode.LostFocus)
            {
                // 当前是 CheckedListBox 失去输入焦点.

                // 对于失去焦点的情况.
                // 需要作判断
                // 因为 可能是点到其它的控件,而  CheckedListBox 失去输入焦点.
                // 也可能是 直接从 CheckedListBox 点到本控件.

                if (DateTime.Now.AddMilliseconds(-250) > lastLostFocusDateTime)
                {
                    // 如果 CheckedListBox 失去焦点的时间
                    // 与本次点击下拉列表的时间
                    // 间隔超过 250 毫秒
                    // 认为是 经过了另外一个控件.
                    // 现在点击回来了,需要显示.
                    lst.Show();
                    lst.Focus();

                    lstShowFlag = CheckedListBoxShowMode.Show;
                }
                else
                {
                    // 是直接从 CheckedListBox 失去焦点
                    // 然后再点击了 本 ComboBox 控件.
                    lstShowFlag = CheckedListBoxShowMode.Hide;
                }
            }
        }