C# 在条件下保持控件的可见性

C# 在条件下保持控件的可见性,c#,winforms,events,textbox,listbox,C#,Winforms,Events,Textbox,Listbox,对你们中的一些人来说,这可能是一个简单的问题 我有一个文本框和一个列表框。ListBox为文本框提供选项,并在双击事件时将所选项目的文本复制到文本框。ListBox仅在TextBox触发Enter事件时才可见。我不想讨论选择此控件组合的原因 我希望列表框在窗体中的任何其他控件获得焦点时消失。因此,我捕获了TextBox的离开事件并调用ListBox.Visible=fale。问题是,当我单击ListBox以选择提供的选项时,TextBox也会失去焦点,从而阻止我选择该选项。 我应该使用什么事件组

对你们中的一些人来说,这可能是一个简单的问题

我有一个文本框和一个列表框。ListBox为文本框提供选项,并在双击事件时将所选项目的文本复制到文本框。ListBox仅在TextBox触发Enter事件时才可见。我不想讨论选择此控件组合的原因

我希望列表框在窗体中的任何其他控件获得焦点时消失。因此,我捕获了TextBox的离开事件并调用ListBox.Visible=fale。问题是,当我单击ListBox以选择提供的选项时,TextBox也会失去焦点,从而阻止我选择该选项。
我应该使用什么事件组合来保留ListBox以选择选项,但在其他控件获得焦点时将其隐藏?

此示例将为您提供所需的结果:

        public Form1()
        {
            InitializeComponent();
            textBox1.LostFocus += new EventHandler(textBox1_LostFocus);
            textBox1.GotFocus += new EventHandler(textBox1_GotFocus);

        }

        void textBox1_GotFocus(object sender, EventArgs e)
        {
            listBox1.Visible = true;
        }

        void textBox1_LostFocus(object sender, EventArgs e)
        {
            if(!listBox1.Focused)
               listBox1.Visible = false;
        }

        private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            textBox1.Text = listBox1.SelectedItem.ToString();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            //if your textbox as focus when the form shows
            //this is the place to switch focus to another control

            listBox1.Visible = false;
        }
在“离开”方法中,可以在更改列表框的可见性之前检查列表框是否为焦点控件:

private void myTextBox_Leave(object sender, EventArgs e)
{
    if (!myListBox.Focused)
    {
        myListBox.Visible = false;
    }
}