Статический Instance
является общим для всех экземпляров MyControl
. Если у вас есть несколько экземпляров MyForm
, каждый из них изменится на Instance
ссылки, поэтому все экземпляры MyForm
будут указывать на один и тот же экземпляр MyControl
.
Обновление
Поскольку существует только один экземпляр MyForm
, это, конечно, необычно.
Однако, если вам нужна система ведения журнала, вы должны действительно отделить эту систему и иметь класс, который выполняет события ведения журнала и запуска, а затем заставить форму прослушивать событие MessageLogged
в этом классе ведения журнала и обновить текстовое поле соответственно. Что-то вроде:
static class Logger
{
public static event EventHandler<MessageLogEventArgs> MessageLogged;
public static void LogMessage(object caller, string message)
{
if (MessageLogged != null)
{
MessageLogged(caller, new MessageLogEventArgs(message);
}
}
}
Таким образом, вам не нужно беспокоиться о наличии статических ссылок на элементы управления и попытке их обновления. Отсоединение системы таким образом значительно облегчит понимание и отладку вашего кода.
Классы, желающие использовать журнал вызова Logger.LogMessage
и ваша форма прослушивает событие.
public partial class MyForm : Form {
private MyControl ctl;
public MyForm() {
ctl = new MyControl();
Controls.Add(ctl);
Logger.MessageLogged += MyMessageLogHandler;
}
private void MyMessageLogHandler(object sender, MessageLogEventArgs e)
{
this.ctl.LogMessage(e.Message);
}
}
public partial class MyControl : UserControl {
public void LogMessage(string msg) {
if (MyInnerTextBox.InvokeRequired) {
MyInnerTextBox.Invoke(LogMessage, msg);
return;
}
MyInnerTextBox.AppendText(msg);
MyInnerTextBox.Refresh();
this.Refresh();
}
}