如何在c#中从另一个表单访问可视组件

时间:2014-01-15 07:06:33

标签: c# winforms

我的主要表单中有一个文本框。

现在我已经创建了一个用于设置文本框值的函数。

public void SetTextOfTextBox(String text)
{
  textbox1.text = text;
}

现在,在我的主要形式中,我打电话给另一个班级(班级b),这对我有用。现在我希望能够从类b调用我的setTextofTextBox函数。

现在,如果我尝试Form1.SetTextOfTextBox("test");,这不起作用。 我做错了什么?

如何从其他类访问Form的组件。

4 个答案:

答案 0 :(得分:2)

  

Form1.SetTextOfTextBox( “测试”);这不起作用

这不起作用,因为SetTextOfTextBox不是静态的,您无法直接访问非静态函数。而且你不能让它静态,因为你的文本框是表单级控件。

  

如何从其他类

访问表单的组件

您必须将Form1的实例传递给其他类才能访问它。像

这样的东西
  Class B = new ClassB(this);  //where this is the instance of Form1.

答案 1 :(得分:1)

您需要在类b中引用Form1的实例,否则您无法调用成员方法。

这样的事情:

class Form1 : System.Windows.Forms.Form {
    void functionInForm1() {
        ClassB objB = new ClassB();
        objB.doSomething(this);
    }
}

class ClassB {
    void doSomething(Form1 form) {
        form.SetTextOfTextBox("test");
    }   
}

答案 2 :(得分:0)

找出 Form1并调用方法:

  foreach (var form in Application.OpenForms) {
    Form1 myForm = form as Form1;

    if (!Object.ReferenceEquals(null, myForm)) {
      myForm.SetTextOfTextBox("Test");

      break;
    }
  }

答案 3 :(得分:0)

您是否尝试过使用代表。

像这样在ClassB中指定代理。

public delegate void OnDone(string textValue);
public event OnDone OnUserDone;
完成ClassB调用事件中的任务后

OnUserDone("DoneClassB");

当您在表单映射委托函数中创建类的对象时。

 Classb b=new Classb();
 b.OnUserDone += new Classb.OnUsrControlDone(CompletedClasss);

以下面的形式定义函数。

void CompletedClasss(string textValue)
{
            SetTextOfTextBox( textValue);
}