如何从另一种形式C#.NET更改表单的属性

时间:2016-10-26 12:48:34

标签: c# .net winforms

我有一些在Form3中使用特定标记标识的按钮,其背景图像我想从Form2更改。我怎么做,我试过了:

foreach ( Button but in Bridge.Form3)
{
    if (but.Tag == tagcheck)
    {
        but.BackgroundImage = Properties.Resources.inactive;
    }
}

我的项目名称是Bridge,我想要的图像位于名为inactive的资源中。我在文本Bridge.Form3

下得到一个错误

我试过了这个:

foreach (Control ctrl in Form3.Controls )
{
     if (ctrl.GetType() == typeof(Button) && ((Button)ctrl).Tag == tagcheck)
     {
         ((Button)ctrl).BackgroundImage = Properties.Resources.inactive;
     }
}

我收到错误消息:非静态字段,方法或属性需要对象引用 表格2已经实例化。

2 个答案:

答案 0 :(得分:0)

试试这个:

//You have to fill this variable (e.g. in constructor) with a reference to the object of you form
public Form3 refF3;    

public void test() {
     foreach (Control ctrl in refF3.Controls) {
            if (ctrl.GetType() == typeof(Button) && ((Button)ctrl).Tag == tagcheck) {
                ((Button)ctrl).BackgroundImage = Properties.Resources.inactive;
            {
      }
}

答案 1 :(得分:0)

以下是两种获取控件对象引用的方法:

1-如果您必须初始化目标表单:

2-如果目标表格已经打开

        Control.ControlCollection f3_ctrls;

        //Case 1
        Form3 f3 = new Form3();            
        f3.Show();
        f3_ctrls = f3.Controls;

        //Case 2
        f3_ctrls = (Application.OpenForms["Form3"]).Controls;

        foreach (Control ctrl in f3_ctrls)
        {
            if ((ctrl is Button) && ctrl.Tag.Equals("myTag"))
            {
                ctrl.BackColor = Color.White;
            }
        }