从类中访问Richtextbox
本文关键字:Richtextbox 访问 | 更新日期: 2023-09-27 18:09:36
我试图在我的richtextbox中添加文本,这被称为ConsoleText。它不是很好用。我在我的窗体中使用属性来访问类中的richtextbox。
它看起来像这样:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Skipped the rest
public string ACText
{
set
{
ConsoleText.AppendText(value);
}
}
现在从我的类的构造函数
public McDonalds(string email, string pass)
{
Form1 f = new Form1();
f.ACText = "test";
}
它没有显示任何文本在我的richtextbox悲哀。我知道它是有效的,因为我可以在属性中使用messageBox并看到值被传递给它。
提前谢谢你,我真的需要帮助。
调用Form1 f = new Form1();
不会给您一个现有表单的引用,它会在表单的控件中创建一个新的,其中包含空白/默认值。
public McDonalds(string email, string pass, Form1 form)
{
form.ACText = "test";
}
一个更简洁的解决方案是从您的McDonalds
类返回一个值,并让FORM适当地设置控件值,而不是将您的类绑定到该表单类。
你可以使用Singleton:
singleton使拥有单实例变得容易。它们允许数据的单个分配和实例。我们回顾一下单例类型。我们看到了最快的实现之一。我们也会考虑其他的可能性。
public partial class Form1 : Form
{
public static Form1 instance = null;
public Form1()
{
instance = this; //add this class to singleton
InitializeComponent();
}
public void Show(string Message)
{
MyConsole.Text = Message;
}
另一个类:
Form1.instance.Show("blah blah");
在Form1
类绑定方法ACText (string val)
中创建Delegate,并将Delegate
传递给McDonalds
类。启动委托
namespace YourNameSpace
{
public delegate void RichTextBoxDelegate(string text);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void ACText(string s)
{
ConsoleText.AppendText(s);
}
// In Some Method Call MCDonald's form
public void ShowMcDonalds()
{
RichTextBoxDelegate deleg = new RichTextBoxDelegate(ACText);
MCdonalds ob = new McDonalds(deleg);
ob.show();
}
}
}
传递给McDonalds表单
Just fire the delegate
public McDonalds(RichTextBoxDelegate sp)
{
Form1 f = new Form1();
sp("This is Test");
}
deleg("Test value"); // form McDonald's Form