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