2014-08-29 54 views
0

對於某些人來說,這可能是一件容易的事情。保存控件在條件下的可見性

我有一個TextBox和一個ListBox。 ListBox爲TextBox提供選項,並將所選項目的文本複製到DoubleClick事件上的TextBox。僅當TextBox觸發Enter事件時,ListBox才變爲可見。我不想討論選擇這種控制組合的理由。

我希望ListBox在表單中的任何其他控件獲得焦點時消失。因此,我捕獲TextBox的Leave事件,並致電ListBox.Visible = fale問題是,當我單擊ListBox選擇提供的選項時,TextBox也會失去焦點,從而阻止我選擇該選項。 我應該使用什麼事件組合來保留ListBox來選擇選項,但是在其他控件獲得焦點時將其隱藏起來?

回答

1

Leave方法,你可以檢查,看看是否ListBox是集中控制或不改變之前,其Visibility

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

這個例子將爲您提供所期望的結果:

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