如何解决是否可以让标签显示当前活动文本框中的文本?
我正在Visual Studio 2019中制作一个C#Windows Form项目。我现在有40个文本框,用户必须填写。这些文本框非常小,这就是为什么在程序顶部我创建了一个大标签的原因。我想知道在C#中是否可以显示用户在此标签框中填写的活动文本框中的文本。 我不确定这条信息对这一过程是否有任何限制,但是一旦用户在当前的所述文本框中填写正确的信息,它就会自动将其禁用并移至下一个。
举个例子:
只要用户在任何这些文本框中输入任何内容,活动的文本框文本就会显示在顶部(在标签中)。
解决方法
在表单的构造函数中,为所有TextBoxes的TextChanged
和Enter
事件添加事件处理程序。它应该看起来像这样:
public Form1()
{
InitializeComponent();
foreach (var textBox in this.Controls.OfType<TextBox>())
{
textBox.TextChanged += TextBoxes_TextChanged;
textBox.Enter += TextBoxes_TextChanged;
}
}
请注意,this.Controls.OfType<TextBox>()
仅在文本框直接放置在表单上时才有效。如果将它们放置在另一个容器(例如GroupBox或Panel)中,则可以改用以下内容:
theOtherContainer.Controls.OfType<TextBox>()
然后,您可以使用以下事件处理程序更改标签的文本:
private void TextBoxes_TextChanged(object sender,EventArgs e)
{
var textBox = (TextBox)sender;
label1.Text = textBox.Text;
}
您还可以为Leave
事件添加事件处理程序,以在光标离开某个TextBox时清除文本。为此,只需在上面的foreach
循环中添加以下行:
textBox.Leave += (o,e) => label1.Text = string.Empty;
,
您可以使用TextChanged
事件来完成此操作。第一个参数是触发事件的TextBox
,因此您可以将其从object
转换为TextBox
。
private void TextBox_TextChanged(object sender,EventArgs e)
{
TextBox txt = sender as TextBox;
label.Text = txt.Text;
}
您可以使用设计器通过一次选择所有TextBox
实例,然后将其转到属性窗口的事件页面来将所有实例连接到该事件。
您可以使用相同的事件处理程序和Enter
事件,以便在您输入下一个TextBox
时Label
发生变化。
使用这种方法要注意的一件事是,TextChanged
会触发导致TextBox.Text
发生变化的任何事物,而不仅仅是键盘输入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。