Добавить текст в RichTexBox из любого места в моем приложении - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь «добавить» текст в Richtextbox, который я использую в качестве окна журнала, чтобы показать события из моего приложения Winforms, из других классов обслуживания.Чтобы было ясно, я хочу добавить текст.

Я перепробовал все, что было предложено здесь.Я установил публичное свойство в форме, я создал делегат, я создал класс для его обработки.Но он не добавляет текст, он либо очищает окно (когда я использую var f = new Form1();, я понимаю, почему это происходит при создании новой формы в памяти)

Ближайшее, что я могу сделатьэто работает следующий класс, который я написал.

class RichTextBoxAppend
    {        
        public static void AddNewText(string message, Form1 f)
        {
            f.richLogWindow.AppendText(DateTime.Now.ToString() + ": " + message + "\r\n");
        }
    }

Я вызываю его из другого метода класса следующим образом:

public SomeClass{
    public SomeMethod(){
        //Some stuff happens here
        RichTextBoxAppend.AddNewText("Some message", Form1);
    }
}

Я получаю ошибку

'Form1' - это тип, который недопустим в данном контексте

Я не хочу создавать новую форму в памяти, поскольку это очищает Richtextbox.

Итак, я хочу «добавить» текст из любого места в моем приложении, не очищая Richtextbox.

TIA

1 Ответ

0 голосов
/ 14 декабря 2018

Вам нужно передать экземпляр Form1 прямо с того момента, как он был создан, и где он потребляется.Например,

Считайте, что вы вызываете SomeClass.SomeMethod из вашей Form1 (в случае, если у вас есть какой-то другой промежуточный класс, продолжайте передавать экземпляр формы, как описано здесь).

Сначала вам нужноПерепишите ваш SomeClass и RichTextAppend Class следующим образом.

class RichTextBoxAppend
{
    public static void AddNewText(string message, Form1 f)
    {
         f.RichText.AppendText(DateTime.Now.ToString() + ": " + message + "\r\n");
     }
}

public class SomeClass
{
    public void SomeMethod(Form1 form)
    {
        //Some stuff happens here
        RichTextBoxAppend.AddNewText("Some message", form);
    }
}

И затем, из места, из которого вы вызываете SomeClass.SomeMethod (в этом случае, предположим, что это происходит в событии Button Click), вам нужнопередать экземпляр формы вашему SomeMethod.

public partial class Form1 : Form
{
public RichTextBox RichText => richLogWindow;
private void button1_Click_1(object sender, EventArgs e)
{
   var someclass = new SomeClass();
   someclass.SomeMethod(this);
}
}

В следующей строке вы передаете экземпляр Form1 в SomeMethod (поскольку вы ссылаетесь на «this» в Form1, он ссылается на экземпляр Form1)

someclass.SomeMethod(this);

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

...