C# 如何在c中从另一个窗体访问可视组件#

C# 如何在c中从另一个窗体访问可视组件#,c#,winforms,C#,Winforms,我的主窗体中有一个文本框 现在我创建了一个函数,用于设置文本框的值 public void SetTextOfTextBox(String text) { textbox1.text = text; } 现在,在我的主要形式中,我调用另一个类(b类),它为我做一些工作。现在,我希望能够从类b调用我的setTextofTextBox函数 现在,如果我尝试Form1.SetTextOfTextBox(“test”)这不起作用。 我做错了什么 如何从另一个类访问窗体的组件。您需要引用类b中For

我的主窗体中有一个文本框

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

public void SetTextOfTextBox(String text)
{
  textbox1.text = text;
}
现在,在我的主要形式中,我调用另一个类(b类),它为我做一些工作。现在,我希望能够从类b调用我的setTextofTextBox函数

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


如何从另一个类访问窗体的组件。

您需要引用类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");
    }   
}

您需要引用类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");
    }   
}

您需要引用类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");
    }   
}

您需要引用类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");
    }   
}
表格1.SetTextOfTextBox(“测试”);这不管用

这不起作用,因为SetTextOfTextBox不是静态的,您不能直接访问非静态函数。您也不能将其设置为静态,因为您的文本框是表单级控件

如何从另一个类访问窗体的组件

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

  Class B = new ClassB(this);  //where this is the instance of Form1.
表格1.SetTextOfTextBox(“测试”);这不管用

这不起作用,因为SetTextOfTextBox不是静态的,您不能直接访问非静态函数。您也不能将其设置为静态,因为您的文本框是表单级控件

如何从另一个类访问窗体的组件

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

  Class B = new ClassB(this);  //where this is the instance of Form1.
表格1.SetTextOfTextBox(“测试”);这不管用

这不起作用,因为SetTextOfTextBox不是静态的,您不能直接访问非静态函数。您也不能将其设置为静态,因为您的文本框是表单级控件

如何从另一个类访问窗体的组件

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

  Class B = new ClassB(this);  //where this is the instance of Form1.
表格1.SetTextOfTextBox(“测试”);这不管用

这不起作用,因为SetTextOfTextBox不是静态的,您不能直接访问非静态函数。您也不能将其设置为静态,因为您的文本框是表单级控件

如何从另一个类访问窗体的组件

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

  Class B = new ClassB(this);  //where this is the instance of Form1.
找到
表单1
并调用该方法:

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

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

      break;
    }
  }
找到
表单1
并调用该方法:

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

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

      break;
    }
  }
找到
表单1
并调用该方法:

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

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

      break;
    }
  }
找到
表单1
并调用该方法:

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

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

      break;
    }
  }

你试过使用代理吗

像这样指定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);
}

你试过使用代理吗

像这样指定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);
}

你试过使用代理吗

像这样指定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);
}

你试过使用代理吗

像这样指定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);
}

在尝试访问表单实例之前是否创建了该实例?Form1是变量还是表单名?表单就是正在运行的类。所以它叫b类。它肯定已经实例化了吗?您在尝试访问它之前是否创建了表单实例?Form1是变量还是表单名?表单就是正在运行的类。所以它叫b类。它肯定已经实例化了吗?您在尝试访问它之前是否创建了表单实例?Form1是变量还是表单名?表单就是正在运行的类。所以它叫b类。它肯定已经实例化了吗?您在尝试访问它之前是否创建了表单实例?Form1是变量还是表单名?表单就是正在运行的类。所以它叫b类。它肯定已经实例化了吗?