如何找到动态创建的文本框的位置?
如何找到动态创建的文本框的位置?
我在页面上的画布上添加了按钮,所以当我点击“添加标题”时,它会在特定位置添加一个文本框,当我点击“添加问题”时,它也会做同样的事情。
这是我编写的执行此操作的代码。
public void AddTitle_Click(object sender, RoutedEventArgs e)
{
TextBox x = new TextBox();
x.Name = "new_textbox";
x.TextWrapping = TextWrapping.Wrap;
x.Height = 20;
x.Width = 100;
x.AcceptsReturn = true;
x.Margin = new Thickness(5, 10, 0, 0);
canvas1.Children.Add(x);
Canvas.SetLeft(x, 100);
Canvas.SetTop(x, 100);
}
private void AddQuestion_Click(object sender, RoutedEventArgs e)
{
TextBox x = new TextBox();
x.Name = "new_textbox";
x.TextWrapping = TextWrapping.Wrap;
x.Height = 20;
x.Width = 200;
x.AcceptsReturn = true;
x.Margin = new Thickness(5, 10, 0, 0);
canvas1.Children.Add(x);
Canvas.SetLeft(x, 140);
Canvas.SetTop(x, 140);
}
标题的位置是较小的文本框,问题是较大的文本框。一个标题可以有任意数量的问题。因此,当我点击“添加问题”时,我需要它出现在最后一个问题文本框下方,当我点击“添加标题”时,我需要它出现在最后一个问题下方,但在不同的位置。
我删除了以前的帖子,因为我找到了如何添加文本框。
如何找到动态创建的文本框的位置?
在代码中,我们可以看到作者尝试使用以下方法添加动态创建的文本框:
x.Name = "new_textbox";
然而,这样做是错误的,因为如果添加了多个具有相同名称的元素,会产生错误。应该将该属性留空或动态地为它们命名。
另外,建议使用TreeView或至少StackPanels来添加这些项目,而不是以这种方式添加。
如果无法使用TreeView,则可以使用StackPanels。为了动态地为文本框命名,可以尝试使用类似于“x.Name =“txtTitle”+ index”的方法,其中index是您拥有的标题数量(在添加标题时可以逐渐增加)。
为了找到文本框的最后位置,建议在类中设置一个索引属性,并在添加文本框时逐渐增加它。您应该有两个索引属性,一个用于标题,另一个用于问题。
如果想要找到窗口中特定元素的位置,可以参考以下问题:
总结起来,要找到动态创建的文本框的位置,应该使用StackPanels来添加元素,并动态为它们命名。为了找到最后一个文本框的位置,可以使用索引属性来跟踪添加的文本框数量。同时,可以参考上述链接来了解如何找到窗口中特定元素的位置。