Вызывая функцию в Классе Формы от другого Класса, C#.NET

Кто-то может сообщить мне некоторым кодом, как я могу вызвать функцию, расположенную в классе Формы от другого класса?

Некоторый код очень поможет!

спасибо

Править: Это - мой текущий код

 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.

8
задан Henk Holterman 1 June 2010 в 14:20
поделиться

4 ответа

Быстрый и грязный способ - создать ссылку на MainForm в файле Program.cs, как указано выше.

В качестве альтернативы можно создать статический класс для обработки обратных вызовов главной формы:

    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;

В любом UserControl или форме, связанной с формой (MDI), которую вы хотите вызвать, просто сделайте следующее...

     UpdateStatusBarMessage.ShowStatusMessage ("Hello World!");

Поскольку это статическое событие, его можно вызвать из любого места вашей программы.

14
ответ дан 5 December 2019 в 07:33
поделиться

Это довольно просто. Либо передайте ссылку на существующую форму в вызове, либо создайте новый экземпляр вашей формы и затем вызовите ваш метод, как любой другой:

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);
    }
}

И затем один небольшой твик в конструкторе формы:

ImageProcessing IP = new ImageProcessing(this);
3
ответ дан 5 December 2019 в 07:33
поделиться

Если метод не связан с UI, а из вашего примера я понял, что это не так, вы можете создать другой класс, который будет содержать этот метод, а затем использовать его в классе Form и в любых других местах, где вы хотите его использовать.

1
ответ дан 5 December 2019 в 07:33
поделиться

Вам нужно будет создать новый экземпляр формы, а затем вызвать его с помощью этого экземпляра. Если он статический, вы можете просто вызвать его, вызвав Form1.Method ().

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

Я бы посоветовал вам перенести этот общий метод в какой-нибудь другой класс.

Если это обычный метод, который будет использоваться в пользовательском интерфейсе, создайте базовый класс формы и унаследуйте все свои формы от этого базового класса формы. Теперь переместите этот общий метод в базовую форму. Затем вы можете использовать метод из любой производной от него формы.

2
ответ дан 5 December 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: