我的主要表单中有一个文本框。
现在我已经创建了一个用于设置文本框值的函数。
public void SetTextOfTextBox(String text)
{
textbox1.text = text;
}
现在,在我的主要形式中,我打电话给另一个班级(班级b),这对我有用。现在我希望能够从类b调用我的setTextofTextBox函数。
现在,如果我尝试Form1.SetTextOfTextBox("test");
,这不起作用。
我做错了什么?
如何从其他类访问Form的组件。
答案 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);
}