如何在winforms应用程序中创建一个文本框,从应用程序的任何位置接受新的文本行?
我有一个包含文本框的主窗体。我想直接从另一个类的方法中将文本添加到框中。
更新
我以我的主要形式尝试了这个:
public void Output(String value)
{
if (txtOutput.Text.Length > 0)
{
txtOutput.AppendText(Environment.NewLine);
}
txtOutput.AppendText(value);
}
但是我无法从其他类调用Output。我是C#的新手,所以也许我错过了一些明显的东西。
问候,Miel。
PS是的,我知道这是糟糕的设计,但是现在这似乎是做我想要的最好方法。文本框的功能类似于控制台。答案 0 :(得分:4)
您需要在表单中公开Text
的{{1}}属性作为TextBox
属性。例如......
string
修改强>
在阅读问题编辑之后,您的问题是您需要在尝试执行该代码时引用表单的特定实例。您可以传递引用(这是更好的选项),也可以使用一些有臭味的代码并具有引用表单的一个实例的静态属性。有点像...
public string TextBoxText
{
get { return textBoxName.Text; }
set { textBoxName.Text = value; }
}
使用此方法,您可以调用public partial class MyForm : Form
{
private static MyForm instance;
public static MyForm Instance
{
get { return instance; }
}
public MyForm() : base()
{
InitializeComponent();
// ....
instance = this;
}
}
答案 1 :(得分:1)
为了再解耦一点,你可以稍微反转控制:
// interface for exposing append method
public interface IAppend
{
void AppendText(string text);
}
// some class that can use the IAppend interface
public class SomeOtherClass
{
private IAppend _appendTarget = null;
public SomeOtherClass(IAppend appendTarget)
{
_appendTarget = appendTarget;
}
private void AppendText(string text)
{
if (_appendTarget != null)
{
_appendTarget.AppendText(text);
}
}
public void MethodThatWillWantToAppendText()
{
// do some stuff
this.AppendText("I will add this.");
}
}
// implementation of IAppend in the form
void IAppend.AppendText(string text)
{
textBox1.AppendText(text);
}
答案 2 :(得分:0)
看起来你的设计有点破坏了。你不应该让商业逻辑混乱GUI控件。为什么不尝试返回值并在接口端分配它?
答案 3 :(得分:0)
这是一种非常糟糕的做法,但只是为了确保所有答案都在那里......
在VS设计器中,每个表单控件在“属性”窗口中都有一个名为Modifiers
的项,默认为Private
。将此更改为其他设置(例如Internal
或Public
)可让您从表单外部访问它。
我必须强调,这是最糟糕的做法。