无法从子类更新主窗体控件

时间:2016-10-17 23:09:00

标签: c#

尝试#2。

我正在尝试在两个类中调用函数。一种获取数据的函数,并在B类中调用函数B以通过Windows窗体应用程序显示数据。

    //Class B containing function B
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace GUI_Server
{
    public partial class ChatServer : Form
    {

        private delegate void EnableDelegate(bool enable);
        private static ChatServer CHT = new ChatServer();

        public ChatServer()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ServerBackBone.test();
        }

        public static void TestConnectivity(string text)
        {
            CHT.TestLabel.Text = text;
        }
    }
} // Assume Class B

以下是A类和A函数

   using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;


namespace GUI_Server
{
    class ServerBackBone
    {


        private static ChatServer CHT = new ChatServer();
        public static void test()
        {
            ChatServer.TestConnectivity("test");


        }


    }
}

所以,这里发生的是正在加载表单,调用A类中的静态函数来联系B类>功能B更新主窗口上的标签...问题在于用新文本更新标签。

单步执行代码表明所有功能都已成功调用&预期的文本传递给函数。

虽然按F5开始调试所述应用程序时,诊断工具会显示以下消息:

  

诊断工具意外失败

诊断中心输出显示:

  

响应状态代码不表示成功:401(未授权)。

常规输出显示:

  

线程0x20c0已退出,代码为0(0x0)。

     

线程0x1624已退出,代码为0(0x0)。

     

'GUI Server.vshost.exe'(CLR v4.0.30319:GUI Server.vshost.exe):   加载'c:\ users \ shaiya \ documents \ visual studio 2015 \ Projects \ GUI   Server \ GUI Server \ bin \ Debug \ GUI Server.exe'。符号已加载。

     

线程0x20fc已退出,代码为0(0x0)。

     

线程0xae8已退出,代码为0(0x0)。

应用程序在这些消息显示后成功运行。单步执行现在显示错误,也不执行断点。标签不会在主控件中更新

全新项目。实际表单接口上的唯一元素是具有重命名为TestLabel的属性的标签。

 this.TestLabel = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // TestLabel
            // 
            this.TestLabel.AutoSize = true;
            this.TestLabel.Location = new System.Drawing.Point(43, 70);
            this.TestLabel.Name = "TestLabel";
            this.TestLabel.Size = new System.Drawing.Size(35, 13);
            this.TestLabel.TabIndex = 0;
            this.TestLabel.Text = "label1";

1 个答案:

答案 0 :(得分:1)

我不确定this中的Form1_LoadCHT中的TestConnectivity是否是同一个对象。它们必须是,因为您正在尝试更新this