从另一个C#.NET类中调用Form类中的函数

有人可以通过一些代码告诉我如何从另一个类调用位于Form类中的函数吗?

一些代码将有很大帮助!

谢谢

编辑:这是我目前的代码

public partial class frmMain : Form { //*******Class Instances******* ImageProcessing IP = new ImageProcessing(); //******************** public void StatusUpdate(string text) { tlsStatusLabel.Text = text; }// public frmMain() { InitializeComponent(); }// } class ImageProcessing { private void UpdateStatusLabel(frmMain form, string text) { form.StatusUpdate(text); }// private UpdateLabel() { UpdateStatusLabel(frmMain, "Converting to GreyScale"); } } 

我遇到的问题是与frmMain。

一种快速而肮脏的方法是在Program.cs文件中创建MainForm的引用,如上所示。

或者,您可以创建一个静态类来处理回到主窗体的调用:

  public delegate void AddStatusMessageDelegate (string strMessage); public static class UpdateStatusBarMessage { public static Form mainwin; public static event AddStatusMessageDelegate OnNewStatusMessage; public static void ShowStatusMessage (string strMessage) { ThreadSafeStatusMessage (strMessage); } private static void ThreadSafeStatusMessage (string strMessage) { if (mainwin != null && mainwin.InvokeRequired) // we are in a different thread to the main window mainwin.Invoke (new AddStatusMessageDelegate (ThreadSafeStatusMessage), new object [] { strMessage }); // call self from main thread else OnNewStatusMessage (strMessage); } } 

将上述内容放入命名空间内的MainForm.cs文件中,但与MainForm类分开。
接下来将此事件调用放入MainForm.cs主类中。

  void UpdateStatusBarMessage_OnNewStatusMessage (string strMessage) { m_txtMessage.Caption = strMessage; } 

然后,当您初始化MainForm.cs时,将此事件句柄添加到表单中。

  UpdateStatusBarMessage.OnNewStatusMessage += UpdateStatusBarMessage_OnNewStatusMessage; 

在任何与您要调用的表单(MDI)相关联的UserControl或表单中,只需以下内容…

  UpdateStatusBarMessage.ShowStatusMessage ("Hello World!"); 

因为它是静态的,所以可以从程序的任何地方调用它。

这很容易。 在调用中传递对现有表单的引用,或者创建表单的新实例,然后像其他任何方式一样调用您的方法:

 public class MyForm : Form { public void DoSomething() { // Implementation } } public class OtherClass { public void DoSomethingElse(MyForm form) { form.DoSomething(); } } 

或者使它成为静态方法,这样您就不必创建实例(但它无法修改打开的窗体窗口)。

UPDATE

看起来ImageProcessing类永远不会获得对表单的引用。 我会略微改变你的代码:

 class ImageProcessing { private frmMain _form = null; public ImageProcessing(frmMain form) { _form = form; } private UpdateStatusLabel(string text) { _form.StatusUpdate(text); } } 

然后在Form构造函数中的一个小tweek:

 ImageProcessing IP = new ImageProcessing(this); 

如果该方法与UI无关,那么从您的示例中我知道它不是,您可以创建另一个包含此方法的类,然后在Form类和您要使用它的任何其他位置使用它。

您必须创建一个新的Form实例,然后使用该实例调用它。 如果它是静态的,那么你可以通过调用Form1.Method()来调用它。

 Form1 form1 = new Form1(); form1.Method(); 

我建议你将这个常用方法移到其他类。

如果它是在UI中使用的常用方法,则创建一个基本Form类,并使用此基本表单类派生所有表单。 现在将此常用方法移动到基本表单。 然后,您可以使用从其派生的任何表单中的方法。

你可以轻松地做到这一点:

1-创建公共类并定义公共静态变量,如下所示:

 class Globals { public static Form1 form; } 

2-在表格中加载函数写下这一行:

 public partial class Form1 : Form { private void Form1_Load(object sender, EventArgs e) { Globals.form= this; } public void DoSomthing() { ............ } } 

3-最后,在您的自定义类中,您可以调用表单中的所有公共函数:

 public class MyClass { public void Func1() { Globals.form.DoSomthing(); } } 

我希望这段代码对你有用:)