2017-08-31 89 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#模式匹配)我可以找到那里的语法 –

相关问题