Быстрый и грязный способ - создать ссылку на 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!");
Поскольку он статический, его можно вызывать из любой точки вашей программы.