在C#中动态访问变量

时间:2016-05-10 11:40:33

标签: c# wpf wpf-controls

我有很多名为x0y1

的按钮

如何动态访问变量名称,以便我可以按xiy1左右循环所有名称。

PHP中的

就像${"myString" . $randomvar}

我不能使用列表或数组,因为该按钮已经存在,通过xaml

定义

5 个答案:

答案 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文档。