C # Запись в RichTextBox в форме из разных классов

#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. Спасибо за ваш конструктивный комментарий. Я, конечно, займусь этим сейчас.