Изменить метку на форме из другого класса - PullRequest
0 голосов
/ 22 февраля 2019

Моя проблема может быть глупой, но после нескольких часов поиска я должен попросить вас о помощи.У меня есть форма 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

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...