不要允许在外部单击组合框下拉列表时关闭
本文关键字:下拉列表 组合 单击 外部 | 更新日期: 2023-09-27 18:13:19
我在一个名为countrybox
的组合框中显示世界上所有的国家。
第二个组合框包含一个名为citybox
的国家的所有城市。
当你选择国家时,citybox
出现,当你打开countrybox
时,citybox
又消失了。
问题出现当你打开citybox
并点击它的外面。
citybox
消失,当你打开countrybox
,当你点击countrybox
外面的时候不会回来。
我试过了:
string ctext { get; set; }
private void countrybox_SelectedIndexChanged(object sender, EventArgs e)
{
citybox.Visible = true;
string ctext = countrybox.Text;
}
private void countrybox_DropDownClosed(object sender, EventArgs e)
{
if (countrybox.Text == ctext)
{
citybox.Visible = true;
}
else
{
citybox.Visible = false;
}
然而,这并没有像我想要的那样工作。
我猜这是因为Combobox类不能将框外的单击识别为_DropDownClosed事件。
我也试过使用验证事件以检查用户是否单击表单
private void countrybox_Validating(object sender, CancelEventArgs e)
{
if (string.Equals((sender as Form).Name, @"Form1") && string.IsNullOrEmpty(countrybox.Text))
{
e.Cancel = true;
MessageBox.Show("You have to select a country!");
}
}
是否有无论如何使组合框下拉列表不关闭时,点击列表外?
我很抱歉如果我有拼写错误,我的母语不是英语。
将我的完整代码贴在下面,供想了解更多细节的人使用。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string[] Countries = File.ReadAllLines(@"C:'Travelbureau'Countries.txt");
Array.Sort(Countries);
for (int i = 0; i < Countries.Length; i++)
{
countrybox.Items.Add(Countries[i]);
}
}
string ctext { get; set; }
private void countrybox_SelectedIndexChanged(object sender, EventArgs e)
{
citybox.Visible = true;
string ctext = countrybox.Text;
switch (countrybox.Text)
{
case "Afghanistan":
string[] AfgCity = File.ReadAllLines(@"C:'Travelbureau'Afghanistan.txt");
Array.Sort(AfgCity);
for (int i = 0; i < AfgCity.Length; i++)
{
citybox.Items.Add(AfgCity[i]);
}
break;
default:
citybox.Text = "City";
citybox.Items.Clear();
break;
}
}
private void countrybox_DropDown(object sender, EventArgs e)
{
citybox.Visible = false;
}
private void countrybox_DropDownClosed(object sender, EventArgs e)
{
if (countrybox.Text == ctext)
{
citybox.Visible = true;
}
else
{
citybox.Visible = false;
}
private void countrybox_Click(object sender, EventArgs e)
{
countrybox.Text = "";
citybox.Visible = false;
}
private void citybox_Click(object sender, EventArgs e)
{
citybox.Text = "";
}
private void countrybox_Validating(object sender, CancelEventArgs e)
{
if (string.Equals((sender as Form).Name, @"Form1") && string.IsNullOrEmpty(countrybox.Text))
{
e.Cancel = true;
MessageBox.Show("You have to select a country!");
}
}
}
}
自从我用Windows窗体做任何事情以来已经有一段时间了,但是您应该能够通过Validating
事件完成这一点。如果你检查一下它是否有一个值,并相应地设置e.Cancel
,我相信这会给你想要的行为。
根据我的经验,在事件中设置某种对用户可见的状态是一个非常好的主意。当用户不再能够点击任何地方时,这可能会令人困惑。你可以用MessageBox
或Label
来做。但这确实是一个UX问题,与你的问题没有直接关系。
您可能还必须设置一个属性,表明在离开控件时应该进行验证,但我认为情况并非如此。如果有人知道,我会更新这个答案,以反映这一点。
是的,你也可以在这个方法中改变cityBox
的可见性