从外部类访问文本框 - 没有错误

时间:2016-04-22 20:09:44

标签: c# forms winforms class external

我有一个基于Windows.Form的Visual Community 2015设计的项目。

我想实现一个简单的服务器程序 - 使用msdn库:

https://msdn.microsoft.com/en-us/library/fx6588te%28v=vs.110%29.aspx

所以我用设计器创建了一个简单的Form1,其中包含一个richTextbox(名称:llog)和一个按钮(单击事件pushthebutton),它调用了一个外部类AsynchronousSocketListener。在此之后,它应该是调用一个方法logme()并弹出一个消息框(它工作,我看到这一点)。但我无法写入richTextbox llog。我没有错误,但没有任何内容写入框中。我记得,它与调用或委托问题有关。但我无法弄清楚。我坚持5个小时没有解决方案。任何人都可以帮助我 - 我必须做什么,从AsynchronousSocketListener()类访问该框?我不知道,为什么我没有错误!

你看到我的最后一次尝试 - 我也尝试在每个方法调用上解析表单作为参数(没有任何作用) - 但我不能相信,这是正确的方式......

ps:英语不好,我知道......

// Form1.cs - I reduced it to the min - a window with a textbox and a button appears
namespace MyProject
{
  public partial class Form1 : Form {}


  public void pushthebutton() {
    AsynchronousSocketListener srv = new AsynchronousSocketListener();
        srv.StartListening();
  }

}



// AsynchronousSocketListener.cs
namespace MyProject
{
    public class AsynchronousSocketListener : Form1
    {
        // Thread signal.
        public static ManualResetEvent allDone = new ManualResetEvent(false);
        public Form1 form;

        public AsynchronousSocketListener()
        {
            form = new Form1();
            logme(this, "constructer");
        }


        public void logme(Form1 form, string s)
        {

            MessageBox.Show("inside logme");

              if (llog.InvokeRequired)
              {
                  // invoke needed
                  form.llog.Invoke((MethodInvoker)delegate { llog.AppendText("\r\n" + s); llog.ScrollToCaret(); });
              }
              else
              {
                  // no invoke needed
                  llog.AppendText("\r\n" + s);
                  llog.ScrollToCaret();
              }

        }
    }
}

// inside FormDesigner.cs - shortcut; box is public...
  public System.Windows.Forms.RichTextBox llog;

1 个答案:

答案 0 :(得分:0)

我还没有永远使用winforms,所以我不知道这是不是一个好习惯,但在AsynchronousSocketListener中,你所做的只是实例化一个新的form与任何事情无关。您可能希望将表单实际传递到那里

public AsynchronousSocketListener(Form1 parent)
{
    form = parent;
    logme(this, "constructer");
}

并在Form1中

AsynchronousSocketListener srv = new AsynchronousSocketListener(this);

在旁注中,我不明白为什么AsynchronousSocketListenerForm1继承,如public class AsynchronousSocketListener : Form1行所示,似乎没有完成任何事情