我有很多名为x0y1
如何动态访问变量名称,以便我可以按xiy1
左右循环所有名称。
就像${"myString" . $randomvar}
我不能使用列表或数组,因为该按钮已经存在,通过xaml
定义答案 0 :(得分:1)
您可以使用:
var textbox =
this.Controls.OfType<TextBox>().Where(txb => txb.Name == "myString").FirstOrDefault();
这假设您处于表单(this.Controls
)的上下文中。
当然,不要忘记添加using System.Linq;
...
答案 1 :(得分:0)
您可以使用此方法获取所有文本框
void AllTextBox(System.Windows.Forms.Control.ControlCollection ctrls)
{
foreach (Control ctrl in ctrls)
{
if (ctrl is TextBox)
{
if (ctrl.Name == "textBox1")
{
// do your stuf with textbox
}
}
}
}
答案 2 :(得分:0)
您可以创建按名称返回控件的函数:
Control GetControlByName(string Name)
{
foreach(Control control in this.Controls)
if(c.Name == Name) return control ;
return null;
}
或具有特定控件的函数:
Button GetButtonByName(string Name)
{
foreach (Control c in this.Controls.OfType<Button>())
if (c.Name == Name) return c;
return null;
}
答案 3 :(得分:0)
对于wpf项目......
我们假设您有一个名为MyGrid
的网格,其上有很多按钮。
您想要引用名为x0y1
的按钮:
var btn = MyGrid.Children.OfType<Button>().Where(x=>x.Name=="x0y1");
注意:上面的代码应该适用于扁平结构(仅一层深度)。
您可以使用此主题中提供的代码来实现相同的目标:How can I find WPF controls by name or type?
答案 4 :(得分:0)
只需调用FindName(&#34; elementName&#34;)。 FindName搜索FrameworkElement的所有子元素。要在窗口中按名称作为字符串访问任何按钮,请调用窗口的FindName()方法!
如果您的代码位于继承自Window的类中,请使用:
Button button = (Button)FindName("xiy1");
如果您在不继承Window但不继承FrameworkElement的类中编写代码,则不可能使用:
Window window = Window.GetWindow(this);
Button button = (Button)window.FindName("xiy1");
有关限制的详细信息,请查看有关Namescopes的MSDN文档。