有人可以通过一些代码告诉我如何从另一个类调用位于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)
因为它是静态的,所以可以从程序的任何地方调用它.
您可以通过简单的方式做到这一点:
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)
我希望这段代码对您有用:)
| 归档时间: |
|
| 查看次数: |
73307 次 |
| 最近记录: |