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

mou*_*iec 8 .net c# winforms

有人可以通过一些代码告诉我如何从另一个类调用位于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");
   }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是与frmMain.

Pau*_*bot 14

一种快速而肮脏的方法是在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);
            }

        }
Run Code Online (Sandbox Code Playgroud)

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

     void UpdateStatusBarMessage_OnNewStatusMessage (string strMessage)
     {
          m_txtMessage.Caption = strMessage;
     }
Run Code Online (Sandbox Code Playgroud)

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

     UpdateStatusBarMessage.OnNewStatusMessage += UpdateStatusBarMessage_OnNewStatusMessage;
Run Code Online (Sandbox Code Playgroud)

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

     UpdateStatusBarMessage.ShowStatusMessage ("Hello World!");
Run Code Online (Sandbox Code Playgroud)

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


beb*_*osh 6

您可以通过简单的方式做到这一点:

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

class Globals
{
   public static Form1 form;
}
Run Code Online (Sandbox Code Playgroud)

2-在表单的加载函数中写入以下行:

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

    public void DoSomthing()
    {
        ............
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public class MyClass
{
    public void Func1()
    {
        Globals.form.DoSomthing();
    }
}
Run Code Online (Sandbox Code Playgroud)

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