如何找到动态创建的文本框的位置?

12 浏览
0 Comments

如何找到动态创建的文本框的位置?

我在页面上的画布上添加了按钮,所以当我点击“添加标题”时,它会在特定位置添加一个文本框,当我点击“添加问题”时,它也会做同样的事情。

这是我编写的执行此操作的代码。

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);

}

标题的位置是较小的文本框,问题是较大的文本框。一个标题可以有任意数量的问题。因此,当我点击“添加问题”时,我需要它出现在最后一个问题文本框下方,当我点击“添加标题”时,我需要它出现在最后一个问题下方,但在不同的位置。

我删除了以前的帖子,因为我找到了如何添加文本框。

0
0 Comments

如何找到动态创建的文本框的位置?

在代码中,我们可以看到作者尝试使用以下方法添加动态创建的文本框:

x.Name = "new_textbox";

然而,这样做是错误的,因为如果添加了多个具有相同名称的元素,会产生错误。应该将该属性留空或动态地为它们命名。

另外,建议使用TreeView或至少StackPanels来添加这些项目,而不是以这种方式添加。

如果无法使用TreeView,则可以使用StackPanels。为了动态地为文本框命名,可以尝试使用类似于“x.Name =“txtTitle”+ index”的方法,其中index是您拥有的标题数量(在添加标题时可以逐渐增加)。

为了找到文本框的最后位置,建议在类中设置一个索引属性,并在添加文本框时逐渐增加它。您应该有两个索引属性,一个用于标题,另一个用于问题。

如果想要找到窗口中特定元素的位置,可以参考以下问题:

在WPF中获取元素相对于窗口的绝对位置

总结起来,要找到动态创建的文本框的位置,应该使用StackPanels来添加元素,并动态为它们命名。为了找到最后一个文本框的位置,可以使用索引属性来跟踪添加的文本框数量。同时,可以参考上述链接来了解如何找到窗口中特定元素的位置。

0