2013-04-21 33 views
1

我正在使用WPF和C#应用程序。在一个窗口中,我有许多文本框按照用户需要以5列和多行排列。它的工作原理如下:最初5行文本框的第一行是可见的,用户输入适当的值,只要他在行的第5个文本框中点击ENTER,就会为新条目生成一个新的相似行文本框。这继续发生。每个文本框使用RegisterName方法和循环具有唯一的名称。在事件Keydown中获取发件人文本框名称

现在我的问题是,假设我已经在窗口上创建了大约25个文本框的5行。我专注于第三行的一个文本框,并键入引发KeyDown事件的事件。在这个keydown事件中,我需要导致此事件的所有文本框的名称。我怎样才能做到这一点?

这样做,也将帮助我访问该行的所有其他文本框,因为我知道它们命名的术语。请帮忙。

回答

1

你可以尝试这样的:

报告中,我们还设置了Name属性与FrameworkContentElement.RegisterName功能一起。

var box = new TextBox(); 
var itemName = "Unique Identifier"; // Change this to your unique name per box 
this.RegisterName(itemName, box); 
box.Name = itemName; 
box.KeyDown += (sender, args) => { 
    var textBox = sender as TextBox; 
    if (textBox != null) 
    MessageBox.Show(textBox.Name); // Would show "Unique Identifier" 
}; 
+0

为什么我们需要'box.Name'和'RegisterName()'? – 2013-04-21 11:45:32

+0

@SamarthAgarwal AFAIK这是因为RegisterName()实际上并未按照您的想法“设置”名称。它在给定的命名上下文中注册给定的控件名称。因此,如果需要,您可以在不同的上下文中使用不同的名称进行注册。它确保给定的名称在该上下文中是唯一的或抛出。 Name属性就像在xaml中定义x:Name一样。如果您尝试将Storyboards连接到代码创建的控件,则需要RegisterName()作为文档状态。 – Viv 2013-04-21 13:32:14

+0

谢谢。这真的有帮助 – 2013-04-21 14:16:11

1

喜请使用此事件对TextBox

TextBox_PreviewKeyDown(object sender, KeyEventArgs e) 

,并获得文本框的ID使用sender参数与标签组合。

i.e.  TextBox textbox = (TextBox)sender; 
+0

这不适用于KeyDown吗? – 2013-04-21 05:47:21

+0

不工作。 '((TextBox)sender).Name'不包含任何内容。 – 2013-04-21 05:50:44

+0

无法在两个事件中获取文本框的名称。 – 2013-04-21 06:03:35

相关问题