2013-01-16 36 views
1

我正在開發一個應用程序,其中有一個搜索框中的按鈕(就像一個在iTunes中)。 我想在文本框中有文本時啓用取消按鈕,並在文本框爲空時禁用它。 我嘗試使用以下代碼在textbox上的text_changed事件,但它跳過if條件。即使發件人發給我正確的價值,但我無法將其放入其他地方。在c#winform中改變的文本啓用禁用按鈕

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     if (string.IsNullOrEmpty(sender.ToString())) 
     { 
      btn_cancel.Visible = false; 
     } 
     else 
     { 
      btn_cancel.Visible = true; 
     } 
    } 

請幫

回答

3

下面是一個簡單的解決方案。

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     this.button1.Enabled = !string.IsNullOrWhiteSpace(this.textBox1.Text); 
    } 

當然,你必須設置button.Enabled =假當窗體最初加載,因爲文本框事件將不會在開始時啓用(真爲當前提供您的問題的所有答案)。

+0

string.IsNullOrEmpty是另一個選項,具體取決於您定位的.NET Framework版本。顯然,Enabled或Visible屬性可以在這裏使用。 – Inisheer

+0

感謝您的幫助。有用 –

1

試試這個:

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    var textbox = sender as TextBox; 
    if (string.IsNullOrEmpty(textbox.Text)) 
    { 
     btn_cancel.Visible = false; 
    } 
    else 
    { 
     btn_cancel.Visible = true; 
    } 
} 

sender.ToString()總是返回System.Windows.Forms.TextBox你需要投senderTextBox和使用Text價值爲你空或空管檢查

+0

除非OP爲同一事件訂閱多個文本框,否則這是不必要的。如果他不是(我認爲),那麼他知道'sender'是'textBox1' .. –

+2

我只是顯示了他有關'sender.ToString()'的錯誤,我並不在乎他是如何使用它的。 –

0

嘗試將發件人投射到TextBox:

if (string.IsNullOrEmpty(((TextBox)sender).Text)) 
+0

除非OP爲同一個事件訂閱多個文本框,否則這是不必要的。如果他不是(我認爲),那麼他知道'sender'是'textBox1' .. –

+0

@SimonWhitehead我想你錯過了這一點,我們試圖表明他的錯誤,正如sa_ddam213所說的... – Afshin

2
private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    if (String.IsNullOrEmpty(textBox1.Text)) 
     btn_cancel.Visible = false; 
    else 
     btn_cancel.Visible = true; 
} 
0

一個襯裏:

btn_cancel.Visible = textBox1.Text.Length > 0; 
0

這是我會怎麼做它:

private void textBox1_TextChanged(object sender, EventArgs e) 
{   
    string text = ((sender as TextBox) == null ? string.Empty : (sender as TextBox).Text); 
    this.button1.Enabled = (string.IsNullOrWhiteSpace(text) == false); 
} 

對此不承擔事件源是一個特定的控制和避免,如果錯誤它連接到的東西,這不是一個TextBox例外。