【问题标题】:Change textBox.Text from static method从静态方法更改 textBox.Text
【发布时间】:2013-01-18 22:41:58
【问题描述】:

我正在运行服务器/客户端通信。 现在我想在服务器textBox 上写一些东西并在客户端textBox 上显示它,所以我从服务器向客户端发送一条消息,客户端使用静态方法接收它:

    static void Client_MessageReceived(object sender, MessageEventArgs e)
    {
        //Client only accepts text messages
        var message = e.Message as ScsTextMessage;
        if (message == null)
        {
            return;
        }
    }

现在我只想通过这个静态方法将消息附加到客户端textBox。我想我需要某种invoke,但我不知道该怎么做,而且我在Google 上找不到任何有用的东西。

【问题讨论】:

  • 那么您要更改哪个文本框?你在一个静态方法中,所以没有上下文。
  • 好的,我有客户端应用程序,它有自己的 tbox 文本框,位于名为客户端的表单上。所以我想更改 tbox 文本。
  • 但从逻辑上讲,从方法的角度来看,可能有多种形式——或者没有!为什么这是一个静态方法? (这是在表格上吗?还有很多你没有告诉我们的。)
  • 哦,对不起,它不必是静态的,发布答案。
  • 是的,正如 Martin 指出的那样,这仅在您的 Client 类具有静态 TextBox 字段(意味着只能有一个)时才有效。然后你可以从你的静态方法中更新它。

标签: c# static static-methods invoke


【解决方案1】:

调用方法

public void AppendText(string what, bool debug = false)
     {
         if (debug)
             return;
         if (this.InvokeRequired)
         {
             this.Invoke(
                 new MethodInvoker(
                 delegate() { AppendText(what); }));
         }
         else
         {
             DateTime timestamp = DateTime.Now;
             tbox.AppendText(timestamp.ToLongTimeString() + "\t" + what + Environment.NewLine);
         }
     }

消息接收方法

 private void Client_MessageReceived(object sender, MessageEventArgs e)
        {
            //Client only accepts text messages
            var message = e.Message as ScsTextMessage;
            if (message == null)
            {
                return;
            }
            AppendText(message.Text, false);

            //Console.WriteLine("Server sent a message: " + message.Text);
        }

【讨论】:

    【解决方案2】:
    // Program.cs
    
    public static ProgramForm Form;
    
    publi static void Main()
    {
        // ...
        Application.Run(Form = new ProgramForm());
        // ...
    }
    
    public static void ChangeText(String message)
    {
        Form.TextBox1.Text = message;
    }
    
    // ProgramForm.cs
    
    private void Client_MessageReceived(object sender, MessageEventArgs e)
    {
        if (e.Message != null)
            Program.ChangeText(e.Message);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      相关资源
      最近更新 更多