C# 从另一个C类更新标签#不工作
所以我正在开发一个软件,可以让我连接到Arduino并控制它。现在,我有了一个方法来处理Arduino的所有代码(串口、波特率、端口名等),一切都很好 现在,我的挑战是:我的窗口中有一个标签,我想更改该标签的内容,以显示软件何时连接到Arduino以及何时断开连接。我有代码,它似乎是正确的,它运行和所有,但它不更新我的标签。我尝试了不同的方法,但仍然不起作用,所以我在其中一个方法中创建了一个MessageBox,该方法应该更新我的标签,当按下按钮(连接按钮)时,该消息框会显示出来,因此该方法起作用,但不应该更新我的标签。你知道我为什么以及如何解决这个问题吗 控制代码:C# 从另一个C类更新标签#不工作,c#,wpf,C#,Wpf,所以我正在开发一个软件,可以让我连接到Arduino并控制它。现在,我有了一个方法来处理Arduino的所有代码(串口、波特率、端口名等),一切都很好 现在,我的挑战是:我的窗口中有一个标签,我想更改该标签的内容,以显示软件何时连接到Arduino以及何时断开连接。我有代码,它似乎是正确的,它运行和所有,但它不更新我的标签。我尝试了不同的方法,但仍然不起作用,所以我在其中一个方法中创建了一个MessageBox,该方法应该更新我的标签,当按下按钮(连接按钮)时,该消息框会显示出来,因此该方法起作
using System;
using System.IO.Ports;
namespace MyApp
{
static class ArduinoControl
{
static SerialPort sp = new SerialPort();
//Pentru conectarea la MainWindow;
static Arduino ard = new Arduino();
public static bool isConnected = false;
public static void ConnectToArduino()
{
try
{
string portName = ard.tboxPortName.Text;
sp.PortName = portName;
sp.BaudRate = 9600;
sp.Open();
ard.DisplayConnected();
isConnected = true;
}
catch (Exception)
{
System.Windows.MessageBox.Show("Please give a valid port number or check your connection. " +
"If the port number is correct but the error persist, please check if your Arduino device is correctly connected.");
}
}
public static void DisconnectFromArduino()
{
try
{
sp.Close();
isConnected = false;
ard.DisplayDisconnected();
}
catch (Exception)
{
System.Windows.MessageBox.Show("In order to disconnect, you have to connect first to an Arduino device.");
}
}
//in work
public static bool IsConnected()
{
return isConnected;
}
}
}
我的窗口中的类位于此处:
using System.Windows;
using System.Windows.Media;
namespace Xander
{
/// <summary>
/// Interaction logic for Arduino.xaml
/// </summary>
public partial class Arduino : Window
{
public Arduino()
{
InitializeComponent();
}
//Butonul de conectare/deconectare la SerialPort pentru conexiunea la Arduino
private void btnConnect_Click(object sender, RoutedEventArgs e)
{
if (!ArduinoControl.IsConnected())
{
ArduinoControl.ConnectToArduino();
}
else
{
ArduinoControl.DisconnectFromArduino();
}
}
//Butonul de ascundere a ferestrei ArduinoControl
private void Button_Click(object sender, RoutedEventArgs e)
{
Hide();
}
//TODO - De verificat - NOT WORKING
public void DisplayConnected()
{
//MessageBox.Show("Metoda este rulata"); //WORKING
btnConnect.Content = "Disconnect";
lblConnectionStatus.Foreground = Brushes.Green;
lblConnectionStatus.Content = "Connected";
}
//TODO - De verificat - NOT WORKING
public void DisplayDisconnected()
{
btnConnect.Content = "Connect";
lblConnectionStatus.Foreground = Brushes.Red;
lblConnectionStatus.Content = "Disconnected";
}
}
}
使用System.Windows;
使用System.Windows.Media;
命名空间Xander
{
///
///Arduino.xaml的交互逻辑
///
公共部分类Arduino:窗口
{
公共阿杜伊诺()
{
初始化组件();
}
//连接/断开连续端口的连接
私有void btn连接\u单击(对象发送方,路由目标)
{
如果(!ArduinoControl.IsConnected())
{
ArduinoControl.ConnectToArduino();
}
其他的
{
ArduinoControl.DisconnectFromArduino();
}
}
//布托诺·德·阿斯康德·费雷斯特里·阿杜伊诺
私有无效按钮\u单击(对象发送者,路由目标e)
{
隐藏();
}
//TODO-取消验证CAT-不工作
公共连接()
{
//MessageBox.Show(“Metoda este rulata”);//正在工作
btnConnect.Content=“断开”;
lblConnectionStatus.前台=画笔.绿色;
lblConnectionStatus.Content=“已连接”;
}
//TODO-取消验证CAT-不工作
public void displaydesconnected()
{
btnConnect.Content=“Connect”;
lblConnectionStatus.前台=画笔.红色;
lblConnectionStatus.Content=“已断开”;
}
}
}
有什么想法吗?您应该调用您在屏幕上看到的现有窗口实例的方法。这意味着您需要以某种方式获取对此特定实例的引用 最简单的方法是使用
Application.Current.Windows
属性:
public static void ConnectToArduino()
{
try
{
Arduino window = Application.Current.Windows.OfType<Arduino>().FirstOrDefault();
string portName = window.tboxPortName.Text;
sp.PortName = portName;
sp.BaudRate = 9600;
sp.Open();
window.DisplayConnected();
isConnected = true;
}
catch (Exception)
{
System.Windows.MessageBox.Show("Please give a valid port number or check your connection. " +
"If the port number is correct but the error persist, please check if your Arduino device is correctly connected.");
}
}
public static void DisconnectFromArduino()
{
try
{
sp.Close();
isConnected = false;
Arduino window = Application.Current.Windows.OfType<Arduino>().FirstOrDefault();
window.DisplayDisconnected();
}
catch (Exception)
{
System.Windows.MessageBox.Show("In order to disconnect, you have to connect first to an Arduino device.");
}
}
publicstaticvoid ConnectToArduino()
{
尝试
{
Arduino window=Application.Current.Windows.OfType().FirstOrDefault();
字符串portName=window.tboxPortName.Text;
sp.PortName=PortName;
sp.BaudRate=9600;
sp.Open();
DisplayConnected();
断开连接=正确;
}
捕获(例外)
{
System.Windows.MessageBox.Show(“请提供有效的端口号或检查您的连接。”+
“如果端口号正确但错误仍然存在,请检查您的Arduino设备是否正确连接。”);
}
}
公共静态void disconnectfromaduino()
{
尝试
{
sp.Close();
断开连接=错误;
Arduino window=Application.Current.Windows.OfType().FirstOrDefault();
DisplayDisconnected();
}
捕获(例外)
{
System.Windows.MessageBox.Show(“要断开连接,必须先连接到Arduino设备。”);
}
}
您需要将标签作为参数传递到另一个classI。我意识到您的意思,我尝试了,但没有成功。我觉得这像WPF代码。如果它类似于WinForms,那么您的ArduinoControl
类将创建一个新的Arduino()代码>表单,但从不显示它。我猜你是在试图引用屏幕上已经出现的表单。是的,它是wpf。我想新的Arduino()是问题的一部分。