私はいくつかのArduinoに接続して制御するソフトウェアを開発中です。今、Arduino(シリアルポート、ボーレート、ポート名など)のすべてのコードを処理するためのメソッドがあり、すべて正常に動作します。別のクラスからラベルを更新するC#Not working
ここに私の挑戦があります:自分のウィンドウにラベルがあり、そのソフトウェアが私のArduinoに接続されているときと切断されたときにそのラベルの内容を変更したいと思っています。私はコードを持っている、正しいと思われる、それは実行され、すべてが私のラベルを更新しません。私はさまざまな方法で試してみましたが、まだ動作しませんでしたので、私のラベルを更新するメソッドの1つでMessageBoxを作成し、ボタン(接続ボタン)が押されたときにそのメッセージボックスが表示されているので、私のラベルを更新すべき行なぜ、どのようなアイデアを私はそれを修正することができますか?
ArduinoControlコード:
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";
}
}
}
任意のアイデア?
あなたは、私はあなたがそれで何を意味するのか実現し、他のクラス –
へのパラメータとしてラベルを渡す必要があります、私が試しましたそれは動作しませんでした。 –
これは私にとってWPFコードのようです。 WinFormsのようなものなら、あなたの 'ArduinoControl'クラスは'新しいArduino(); 'フォームを作成しますが、決してそれを表示しません。私はあなたが既に画面上のフォームを参照しようとしていると推測しています。 – LarsTech