C# 如何更改列表中控件的属性<;UIControl>;不使用循环?

C# 如何更改列表中控件的属性<;UIControl>;不使用循环?,c#,wpf,list,loops,C#,Wpf,List,Loops,我有下面的代码,其中一个单击事件将动态地为WrapPanel创建额外的画布,每个画布包含一个文本框和一个按钮。一旦一个画布上的按钮被点击,文本框。文本和按钮。内容从“Foo”变为“Jesus” 下面的代码可以工作,但并不理想。因为每个属性都会更改(“Foo”到“Jesus”),所以我必须运行一个循环。我必须运行两个循环才能更改文本框和按钮上的文本。有没有直接的方法来更改循环以外的属性?我的应用程序在画布中包含30多个控件,我不想每次运行30多个循环只是为了更改一些文本 List<Canva

我有下面的代码,其中一个单击事件将动态地为WrapPanel创建额外的画布,每个画布包含一个文本框和一个按钮。一旦一个画布上的按钮被点击,文本框。文本和按钮。内容从“Foo”变为“Jesus”

下面的代码可以工作,但并不理想。因为每个属性都会更改(“Foo”到“Jesus”),所以我必须运行一个循环。我必须运行两个循环才能更改文本框和按钮上的文本。有没有直接的方法来更改循环以外的属性?我的应用程序在画布中包含30多个控件,我不想每次运行30多个循环只是为了更改一些文本

List<Canvas> cvList = new List<Canvas>();
List<TextBox> tbList = new List<TextBox>();
List<Button> FooList = new List<Button>();
WrapPanel wp = new WrapPanel();

private void createbtn1_Click(object sender, RoutedEventArgs e)
{            
    Canvas cv = new Canvas();
    StackPanel sp = new StackPanel();
    TextBox tb = new TextBox();
    Button Foo = new Button();

    sp.Orientation = Orientation.Vertical;
    sp.Children.Add(tb);
    sp.Children.Add(Foo);
    cv.Children.Add(sp);
    wp.Children.Add(cv);
    cvList.Add(cv);
    tbList.Add(tb);
    FooList.Add(Foo);

    cv.Width = 100;
    cv.Height = 100;

    tb.Text = "#" + (cvList.IndexOf(cv)+1);
    tb.Width = 50;
    tb.Height = 30;

    Foo.Content = "Foo";
    Foo.Click += destroy_Click;
}

private void Foo_Click(object sender, RoutedEventArgs e)
{
    Button b = sender as Button;
    var bIndex = FooList.IndexOf(b);


    foreach (TextBox t in tbList)
    {
        if (tbList.IndexOf(t) == bIndex)
        {
            t.Text = "Jesus";


           }
        }
    foreach (Button f in FooList)
    {
        if (FooList.IndexOf(t) == bIndex)
        {
            t.Content = "Jesus";
         }
    }
}
List cvList=newlist();
List tbList=新列表();
列表傻瓜=新列表();
WrapPanel wp=新WrapPanel();
私有void createbtn1_单击(对象发送者,路由目标e)
{            
画布cv=新画布();
StackPanel sp=新的StackPanel();
TextBox tb=新的TextBox();
按钮Foo=新按钮();
sp.方向=方向垂直;
sp.Children.Add(tb);
sp.Children.Add(Foo);
添加儿童简历(sp);
wp.Children.Add(cv);
cvList.Add(cv);
tbList.Add(tb);
傻瓜。添加(Foo);
cv.宽度=100;
cv.高度=100;
tb.Text=“#”+(cvList.IndexOf(cv)+1);
tb.宽度=50;
tb.高度=30;
Foo.Content=“Foo”;
Foo.Click+=销毁\u单击;
}
私有void Foo_Click(对象发送方,路由目标)
{
按钮b=发送器为按钮;
var bIndex=愚人指数(b);
foreach(tbList中的文本框t)
{
if(tbList.IndexOf(t)==bIndex)
{
t、 Text=“耶稣”;
}
}
foreach(傻瓜列表中的按钮f)
{
if(愚人索引of(t)=bIndex)
{
t、 Content=“耶稣”;
}
}
}

只需按索引访问文本框,并直接设置按钮的内容:

if(bIndex < tbList.Count && bIndex != -1)
    tbList[bIndex].Text = "Jesus";
if(b != null && bIndex != -1)
    b.Content = "Jesus";
if(bIndex
只需按索引访问文本框,并直接设置按钮的内容:

if(bIndex < tbList.Count && bIndex != -1)
    tbList[bIndex].Text = "Jesus";
if(b != null && bIndex != -1)
    b.Content = "Jesus";
if(bIndex
为什么不能在索引中获取项目并将其设置为文本:

tbList[bindex].Text="Jesus";
至于设置按钮内容,您已经有了单击事件中的按钮,因此只需使用该按钮即可:

b.Content = "Jesus";
您当前的代码只是循环遍历列表中的每个项,并获取该项的索引,然后查看它是否是您想要的索引。通过列表的索引器直接访问将获得您想要的

您可能希望执行一些错误检查,但现有代码中也没有这样做


为什么不能在索引中获取项目并将其设置为文本:

tbList[bindex].Text="Jesus";
至于设置按钮内容,您已经有了单击事件中的按钮,因此只需使用该按钮即可:

b.Content = "Jesus";
您当前的代码只是循环遍历列表中的每个项,并获取该项的索引,然后查看它是否是您想要的索引。通过列表的索引器直接访问将获得您想要的

您可能希望执行一些错误检查,但现有代码中也没有这样做


在他的代码中不需要进行错误检查!如果bIndex为-1或sender不是按钮,则他的代码中不会引发异常…@Daniel,这是正确的,它当前不会设置文本。如果代码无法出现错误情况,则可能不需要进行错误检查。在他的co中不需要进行错误检查de!如果bIndex为-1或sender不是按钮,则不会在其代码中引发任何异常…@Daniel,这是正确的,它当前不会设置文本。如果代码无法发生错误,则可能不需要进行错误检查。