2017-08-31 34 views
0

首先,我知道可能有更好的解決方案,我非常願意傾聽這些解決方案。我在互聯網上搜索尋找這樣的問題,但無法找到迄今爲止工作的問題。我有一個窗體上的多個文本框,當用戶單擊文本框時,我運行一個方法來找出哪個文本框是關注的,獲取該文本框的標記和文本框的名稱都作爲字符串(TextboxX和測試)。我的目標是用例如'電子郵件'掩蓋文本框,當用戶單擊文本框時,文本框的前景色變爲黑色,文本框文本爲空,儘可能少的代碼。 以下是我的代碼。獲取表單中的焦點文本框的名稱c#

public void masked() 
    { 
     if (textboxX.Text == test) 
      { 
       textboxX.ForeColor = Color.Black; 
       textboxX.Text = ""; 
      } 
      else 
      { 
       textboxX.Select(0, textboxX.Text.Length); 
      }   
    } 

當文本框被點擊時,這就是它當前所做的。

private void txtSignup_email_Click(object sender, EventArgs e) 
    { 
     textboxX = txtSignup_email; 
     test = "Email"; 
     masked(); 
    } 

原因是我有7個文本框,它會爲我節省大約14行代碼,這實際上並不是必需的。提前致謝。

+2

您可以指向所有文本方框到同一個事件處理程序,這意味着它們都使用相同的驗證代碼。 – ainwood

+0

你在點擊事件中做了其他事情嗎?在掩蔽旁邊?如果是,它如何不同於文本框到文本框? –

回答

2

好吧,有幾件事情可以做得更好。

首先,您可以使用Password而不是TextBox,它會自動被屏蔽,如果我正確理解您的要求,將無法看到。

第二件事是ainwood在評論中所說的話,您可以將文本框中所有點擊或關注的事件指向單一方法。事件處理程序方法有兩個參數sendere。前者的類型爲object,並顯示在您可以投射的情況下調用此方法的人是作爲文本框並將調用文本框。該轉換操作是這樣的:

var textBox = sender as TextBox; 
if (textBox != null) 
{ 
    //Do what you want with textBox here 
} 

此外,如果你使用新的C#7,你可以做(​​是不是有什麼不同內部只是更好的閱讀):

if (sender is TextBox textBox) 
{ 
    //Do what you want with textBox here 
} 
+0

它在C#6中工作。它是2017年的人:) – Emad

+0

使用[VS 2015和框架4.6將對應於C#6](https://stackoverflow.com/a/247623/5174469)我得到一個編譯器錯誤: 「textBox在當前上下文中不可用」 –

+0

但是如果我查看[C#7中的新功能列表](https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp -7#模式匹配)我可以找到那裏的語法 –

相關問題