通过一个按钮的“单击”方法访问其他按钮

时间:2019-09-09 23:00:15

标签: c#

如何从一个按钮的单击方法访问其他按钮?我正在使用Milestone SDK(C#,Visual Studio)。

我尝试使用“ this。”,但是它显然不起作用...(我是C#的新手)...

在下面的示例中,我可以更改bbt按钮对象的“ CONTENT”(bbt.Content =“ TEST”;):

private void bbt_Click(object sender, RoutedEventArgs e)
{
var bbt = sender as Button;

bbt.Content = "TEST";
}

但是如何更改代码中定义的其他按钮的内容?例如,另一个按钮名称是“ action1”?

也许有一种方法可以这样声明:

var bbt = sender as Button;

但是对于所有其他按钮,以便我可以像访问“ bbt”一样访问它们?

想有一个允许mi做的代码:

action1.Content = "TEST";

其中action1是另一个按钮。

似乎我需要在引用“ action1”之前添加一些前缀,因为否则它不可见并生成:

  

CS0103当前上下文中不存在名称“ action1”

3 个答案:

答案 0 :(得分:0)

好像您正在尝试更改按钮标签。 如果按钮已经存在,请使用:

private void bbt_Click(object sender, RoutedEventArgs e) { bbt.Text= "TEST"; }

答案 1 :(得分:0)

如果您有一个像flowLayoutPanel,panels这样的容器,其中子项是按钮,则可以使用forloop获取所有buttons并将其更改为contents

//if without a container you must Name your buttons to button1,button2,button3
int i=0;
while(true){
  i++;
 Button button = new Button();
 button.Name = "button"+i.toString();//output button1 to n
 WindowsFormName.Controls.Add(button);
}


private void bbt_Click(object sender, RoutedEventArgs e)
{

  //loop all controls
  int y=0;
  foreach(Control control in WindowsFormName.Controls){

  y++;

  string name = "Button"+y.toString();

    //check if names are button1 or buttonN
  if(control.Name.Equals(name){
        control.Content = "TEST";
    }
   }

}

答案 2 :(得分:0)

如果该按钮与被单击的按钮位于同一层次结构,则您应该能够正常访问它(例如,action1.Text =“ hello world”;)。我相信您的问题可能是该按钮位于子控件上。

如果是这种情况,则必须编写某种类型的递归代码以找到所需的按钮(请参阅此帖子的答案以递归搜索Get control by name, including children的控件)

然后称呼它:

var actionButton = this.FindControlRecursively<Button> ("action1");