首页 > 解决方案 > 从另一个类更改表单上的标签

问题描述

我的问题可能是一个愚蠢的问题,但经过数小时的搜索,我不得不向你寻求帮助。我有一个 WPF 表单LoginPage,其中包含一个向用户显示消息的标签(称为 AlertText),我需要从另一个类更改他的内容。要更改我使用的内容AlertText.Content = "content",它可以完美运行。但是当我在另一个班级并且我想改变它时,它什么也做不了。两个类都在同一个命名空间下。

我试过这个:

LoginPage lg = new LoginPage();
lg.AlertText.Content = "content";

对象已创建,但第二行未执行。我试图SetAlertText()在我的LoginPage班级中创建一个公共函数,但这也不起作用。我将其设为静态并调用它,LoginPage.SetAlertText()但同样的问题仍然存在。

我在我的LoginPage

public static LoginPage instance;

        public LoginPage()
        {
            instance = this;
        }

并称它为

LoginPage.instance.SetAlertText();
    and 
LoginPage.instance.AlertText.Content = "content";

但都没有奏效。

我也试过:

public LoginPage()
            {
                instance = new LoginPage();
            }

我能做些什么 ?

编辑:这是两个类的完整代码:

namespace TMClientWPF
{
    /// <summary>
    /// Logique d'interaction pour LoginPage.xaml
    /// </summary>
    public partial class LoginPage : Page
    {
        ClientTCP client;
        bool isConnected = false;
        public RegisterPage registerPage;
        public static LoginPage instance;

        public LoginPage()
        {
            instance = this;
            InitializeComponent();

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            AlertText.Content = "";
            try
            {
                if (isConnected == false)
                {

                    client = new ClientTCP();
                    client.Connect();

                    isConnected = true;
                }

                client.SEND_LOGINS(UsernameText.Text, PasswordText.Password.ToString());
            }
            catch (NullReferenceException)
            {
                AlertText.Visibility = Visibility.Visible;
                AlertText.Content = "Failed to connect to server, please try again later.";
            }
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            registerPage = new RegisterPage();
            this.NavigationService.Navigate(registerPage);
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
        }

        public void SetAlertText(string text)
        {
            AlertText.Visibility = Visibility.Visible;
            AlertText.Content = "Welcome Home";
        }
    }
}

///////////////////////////

namespace TMClientWPF
{
    public class ClientHandlePackets
    {
        public static ByteBuffer playerBuffer;
        private delegate void Packet_(byte[] data);
        private static Dictionary<long, Packet_> packets;
        private static long pLength;

        public static void HandleData(byte[] data)
        {

            InitializePackets();
            byte[] Buffer;
            Buffer = (byte[])data.Clone();

            if (playerBuffer == null)
            {
                playerBuffer = new ByteBuffer();
            }
            playerBuffer.WriteBytes(Buffer);
            if (playerBuffer.Count() == 0)
            {
                playerBuffer.Clear();
                return;
            }

            if (playerBuffer.Length() >= 8)
            {
                pLength = playerBuffer.ReadLong(false);

                if (pLength <= 0)
                {
                    playerBuffer.Clear();
                    return;
                }
            }

            while (pLength > 0 & pLength <= playerBuffer.Length() - 8)
            {
                if (pLength <= playerBuffer.Length() - 8)
                {
                    playerBuffer.ReadLong(); //read out the packet identifier
                    data = playerBuffer.ReadBytes((int)pLength); //get the full package length
                    HandleDataPackets(data);
                }
                pLength = 0;
                if (playerBuffer.Length() >= 8)
                {
                    pLength = playerBuffer.ReadLong(false);

                    if (pLength < 0)
                    {
                        playerBuffer.Clear();
                        return;
                    }
                }
            }
        }

        private static void HandleDataPackets(byte[] data)
        {
            long packetIdentifier;
            ByteBuffer buffer;
            Packet_ packet;

            buffer = new ByteBuffer();
            buffer.WriteBytes(data);
            packetIdentifier = buffer.ReadLong();
            buffer.Dispose();

            if (packets.TryGetValue(packetIdentifier, out packet))
            {
                packet.Invoke(data);
            }


        }

        private static void InitializePackets()
        {
            packets = new Dictionary<long, Packet_>();
            packets.Add((long)ServerPackets.S_INFORMATION, PACKET_INFORMATION);
            packets.Add((long)ServerPackets.S_EXECUTEMETHODONCLIENT, PACKET_EXECUTEMETHOD);
            packets.Add((long)ServerPackets.S_LOGCALLBACK, Packet_LogCallback);
        }

        #region packets

        private static void PACKET_INFORMATION(byte[] data)
        {
            ByteBuffer buffer = new ByteBuffer();
            buffer.WriteBytes(data);

            long packetIndentifier = buffer.ReadLong();

            string msg1 = buffer.ReadString();
            string msg2 = buffer.ReadString();
            int level = buffer.ReadInteger();
            buffer.Dispose();
            ClientTCP.instance.SEND_THANKYOU();
        }

        private static void PACKET_EXECUTEMETHOD(byte[] data)
        {
            ClientTCP client = new ClientTCP();
        }

        private static void Packet_LogCallback(byte[] data)
        {
            ByteBuffer buffer = new ByteBuffer();
            buffer.WriteBytes(data);
            buffer.ReadLong();
            string message = buffer.ReadString();
            string username = buffer.ReadString();
            buffer.Dispose();
            if(message == "true")
            {
               // LoginPage.SetAlertText("Welcome Home.");
            }
            else
            { 
                LoginPage lg = new LoginPage();
                LoginPage.instance.SetAlertText("Invalid logins.");
            }
        }

        #endregion

    }
}

标签: c#wpfoop

解决方案


推荐阅读