2009-05-06 58 views
2

如何在我的winforms应用程序中创建一个可从应用程序中的任意位置接受新文本行的文本框?从应用程序中的任何位置访问文本框

我有一个包含文本框的主窗体。我想直接从另一个类中的方法添加文本到框中。

更新

我的主要形式尝试这样:

public void Output(String value) 
    { 
     if (txtOutput.Text.Length > 0) 
     { 
      txtOutput.AppendText(Environment.NewLine); 
     } 
     txtOutput.AppendText(value); 
    } 

但我不能打电话从其他类输出。我是C#的新手,所以也许我错过了一些明显的东西。

问候,米尔。

PS是的,我知道这是不好的设计,但现在这似乎是做我想做的最好的方式。该文本框的功能就像一个控制台。

回答

4

您需要将TextBoxText属性作为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; 
    } 
} 

使用这种方法,你可以调用MyForm.Instance.Output("test");

+0

从OP想要一次添加行的问题开始。所以我猜这是一个MultiLine。 – 2009-05-06 14:16:01

+0

@亨克:而且......?我不确定你在做什么。 – 2009-05-06 14:22:21

+0

为此,臭的代码不是一个反对意见... – Miel 2009-05-06 14:41:45

0

它看起来像你的设计是破坏一点点。您不应该让buisness逻辑与GUI控件混淆。你为什么不尝试一个返回值并在接口端分配它?

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); 
} 
0

这是做的一个非常糟糕的方式,但只是为了确保所有的答案都在那里...

在VS设计器中,每个窗体控件的属性窗口中都有一个名为Modifiers的项,默认为Private。将其更改为其他设置之一(例如InternalPublic)将允许您从表单外部访问它。

我必须强调,这是最糟糕的方式。