如何将对表单对象(即TextBox)的引用传递给类,以便在创建此实例时可以指定此实例需要使用哪个文本框? 具体的例子: 我有一个处理一些文本字符串的类。我有几个此类的实例。 我的表单上也没有几个文本框。我在类中有一个方法,可在文本框中显示一些文本。创建该实例时,我该怎么做才能告诉类的特定实例?应该在构造函数中,例如:
公共MyClass(字符串textString,/ 引用到文本框 /)
这是我的课程:
id(A[:])
这是我的表格:
public class LogClass
{
private readonly TextBox _textBox;
private string logText;
public string LogText
{
get
{
return logText;
}
set
{
logText = value;
}
}
public void AddToLog(string textString)
{
try
{
if (string.IsNullOrEmpty(textString))
{
throw new ArgumentException("message", nameof(textString));
}
logText = logText+ "\n" + textString;
_textBox.Text = logText;
}
catch (Exception)
{
throw;
}
}
public LogClass(string initialText, TextBox textBox)
{
logText = initialText;
_textBox = textBox;
_textBox.Text = logText;
}
}
错误CS0236在此行上:
public partial class LogWindow : Form
{
LogClass myLog = new LogClass("this is initial string", logOutputBox);
public LogWindow()
{
InitializeComponent();
}
public string LogTextToPass {
get { return logOutputBox.Text; }
set { logOutputBox.Text = value; }
}
private void buttonWriteLog_Click(object sender, EventArgs e)
{
myLog.AddToLog(inputText.Text);
}
private void logOutputBox_TextChanged(object sender, EventArgs e)
{
}
}
错误CS0236字段初始化程序无法引用非静态字段,方法或属性'LogWindow.logOutputBox' logOutputBox突出显示
答案 0 :(得分:1)
它应该像在Constructor
中传递对其的引用一样简单无论何时创建类或结构,都将调用其构造函数。一种 类或结构可能具有多个采用不同构造函数的构造函数 论点。构造函数使程序员可以设置默认值, 限制实例化,并编写灵活且易于阅读的代码。
public class MyLovelyHorse
{
// private field of TextBox to play with internally
private readonly TextBox _textbox;
// constructor
public MyLovelyHorse(TextBox textbox)
{
_textbox = textbox;
}
// some awesome method that does stuff
public void SomeMethodThatDoesStuff()
{
_textbox.Text = "rah";
}
}
用法
var myLovelyHorse = new MyLovelyHorse(MyTextBox);
// do stuff
myLovelyHorse.SomeMethodThatDoesStuff();
答案 1 :(得分:1)
您可以按照任何想要的方式传递它。如果没有TextBox不能使用该类,则构造函数参数似乎是明智的。在构造函数中,您可以预订TextBox的事件。
class TextBoxHandler
{
private readonly TextBox _textbox;
public TextBoxHandler(TextBox textbox)
{
_textbox = textbox;
_textbox.Click += HandleClick;
}
public void HandleClick(object sender, EventArgs e)
{
//Do something
}
}