c# - 从另一个类更改表单上的标签
问题描述
我的问题可能是一个愚蠢的问题,但经过数小时的搜索,我不得不向你寻求帮助。我有一个 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
}
}
解决方案
推荐阅读
- javascript - 我可以使用 JavaScript 在浏览器的嵌入式 PDF 查看器中滚动吗?
- java - 如何为不同的 JSON 创建一个通用的 jsondatareader 类
- terraform - 遍历 Terraform 本地列表中的资源值列表
- reactjs - 常量道具 ReactJS 中的 setState
- javascript - 打字稿:表达函数实例属性
- javascript - HTML 图像幻灯片显示空白屏幕
- java - 在线程中删除时出现 TransactionRequiredException
- java - 使静态引用变量nullify会被java垃圾收集吗?
- batch-file - 启动新进程后重新生成值 %random%
- qt - 沿 QPainterPath 动画椭圆