当前位置: 首页 > 编程语言 > C#

WPF如何动态创建文本框并在点击按钮时找到文本框?分享

时间:2023-04-11 12:15:02 C#

WPF如何动态创建文本框并在单击按钮时查找文本框?我正在使用以下代码动态创建TextBox和Button:ButtonbtnClickMe=newButton();btnClickMe.Content="点我";btnClickMe.Name="btnClickMe";btnClickMe.Click+=newRoutedEventHandler(this.CallMeClick);someStackPanel.Childern.Add(btnClickMe);TextBoxtxtNumber=newTextBox();txtNumber.Name="txtNumber";txtNumber.Text="1776";someStackPanel.Childern.Add(txtNumber);.单击我按钮甚至被正确触发。但是我找不到用于动态输入的文本框。这是我点击我的活动的地方:protectedvoidClickMeClick(objectsender,RoutedEventArgse){//查找电话号码if(txtNumber!=null){stringmessage=string.Format("号码是{0}",txtNumber.Text);MessageBox.Show(消息);}else{MessageBox.Show("文本框为空");}}如何找到TextBoxtxtNumber?JoshG有一个线程来修复此代码:使用RegisterName()。这里有三个好处:没有成员变量用于保存对动态创建的文本框的引用。编译。完整的代码。使用系统;使用System.Windows;使用System.Windows.Controls;namespaceAddControlsDynamically{publicpartialclassWindow1:Window{publicvoidWindow_Loaded(objectsender,RoutedEventArgse){GenerateControls();}publicvoidGenerateControls(){ButtonbtnClickMe=newButton();btnClickMe.Content="点我";btnClickMe.Name="btnClickMe";btnClickMe.Click+=newRoutedEventHandler(this.CallMeClick);someStackPanel.Children.Add(btnClickMe);TextBoxtxtNumber=newTextBox();txtNumber.Name="txtNumber";txtNumber.Text="1776";someStackPanel.Children.Add(txtNumber);someStackPanel.RegisterName(txtNumber.Name,txtNumber);}protectedvoidCallMeClick(objectsender,RoutedEventArgse){TextBoxtxtNumber=(TextBox)this.someStackPanel.FindName("txtNumber");stringmessage=string.Format("号码是{0}",txtNumber.Text);MessageBox.Show(消息);}}}另一种方法是在实例化时将关联的TextBox设置为ButtonTag。btnClickMe.Tag=txtNumber;这样您就可以在事件处理程序中将其取回。protectedvoidClickMeClick(objectsender,RoutedEventArgse){ButtonbtnClickMe=senderasButton;if(btnClickMe!=null){TextBoxtxtNumber=btnClickMe.TagasTextBox;//...}}您可以注册文本框的名称以使原始点击处理程序工作:someStackPanel.RegisterName(txtNumber.Name,txtNumber);这将允许您在StackPanel上调用FindName并找到TextBox。如果要通过可视化控件树进行全面搜索,可以使用VisualTreeHelper类。使用以下代码遍历控件的所有可视子项:for(inti=0;i如果要向下搜索树,则需要递归执行此循环,如下所示:publicdelegatevoidTextBoxOperation(TextBoxbox);publicboolSearchChildren(DependencyObjectparent,TextBoxOperationop){for(inti=0;i有什么方法可以让TextBox控件在类中成为一个字段而不是builder方法中的一个变量?以上是C#学习教程:WPF如何动态创建文本框和Findthetextboxwhenthebuttonisclicked?所有内容分享,如果对大家有用,需要详细了解C#学习教程,希望大家多多关注---公众号classMyWindow:Window{privateTextBoxtxtNumber;publicvoidWindow_Loaded(){GenerateControls();}publicvoidGenerateControls(){ButtonbtnClickMe=newButton();btnClickMe.Content="ClickMe";btnClickMe.Name="btnClickMe";btnClickMe.Click+=newRoutedEventHandler(this.CallMeClick);someStackPanel.Childern.Add(btnClickMe);txtNumber=newTextBox();txtNumber.Name="txtNumber";txtNumber.Text="1776";someStackPanel.Childern.Add(txtNumber);}protectedvoidClickMeClick(objectsender,RoutedEventArgse){//查找电话号码stringmessage=string.Format("Thenumberis{0}",txtNumber.T分机);MessageBox.Show(消息);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: