#c#
#c#
Вопрос:
Я использую a RichTextBox
, который находится в a Form
, который я в основном использую как окно журнала, в то время как программа выполняет различные функции — очень похоже на окно отладки. Различные методы записывают в окно, поскольку они выполняют задачи над различными файлами. Простой класс выглядит следующим образом:
public partial class ValidationWindow : Form
{
public ValidationWindow()
{
InitializeComponent();
}
public void writeToWindow(string text)
{
if (richTextBoxValidationWindow.TextLength > 0)
{
richTextBoxValidationWindow.AppendText(Environment.NewLine text);
}
else
{
richTextBoxValidationWindow.Text = text;
}
}
}
Я создал экземпляр формы, содержащий текстовое поле, из класса обычным способом, т.Е. ValidationWindow valWindow = new ValidationWindow()
Затем вызываю show()
метод для отображения окна, и затем я могу записать в него, используя метод в вышеупомянутом классе с именем writeToWindow . Все хорошо.
Теперь мне нужно иметь возможность продолжать запись в то же окно из других классов. Я, очевидно, не хочу создавать больше экземпляров одного и того же окна проверки. Итак, каков наилучший способ сделать это, пожалуйста?
Комментарии:
1.
valWindow.writeToWindow("test")
2. Я думаю, вы неправильно поняли. Я могу писать в него без проблем из класса, из которого я его создаю, я спрашиваю, как писать в ТО ЖЕ окно из других классов.
3. Если вы не можете использовать исходную ссылку, вы можете получить ее из
Application.OpenForms
и вызватьwriteToWindow()
метод для этого.
Ответ №1:
Похоже, вам нужен доступ к этой форме из других форм и классов. Другими словами, вам нужно, чтобы эта форма была доступна во всем мире.
Самый простой способ сделать это — добавить глобальную переменную в ваше приложение и сохранить ссылку на окно ведения журнала в этой переменной. Затем, если какому-либо другому классу необходимо войти, он может получить доступ к окну ведения журнала через глобальную переменную.
Однако, возможно, это не лучший способ сделать это, поскольку вы привязываете свое ведение журнала к этому окну. Что произойдет, если вы решите войти в систему другим способом? Вам придется изменять каждую ссылку на window, что означает изменения во всем приложении. Вам было бы лучше посмотреть на что-то вроде сообщений, которые позволяют вызывающему коду отправлять сообщение с просьбой о том, чтобы что-то было зарегистрировано, но не нужно ничего знать о классе, который получает сообщение и выполняет фактическое ведение журнала. Я знаю, что WOF поддерживает это с помощью MVVM, но не уверен, как вы могли бы сделать это в WinForms (предполагая, что это то, что вы используете). Возможно, выполните поиск по «сообщениям winforms» и посмотрите, что появляется.
Надеюсь, это поможет
Комментарии:
1. Спасибо за ваш конструктивный комментарий. Я, конечно, займусь этим сейчас.