Bubble, bubble, toil and cuddle !!!

2019/08/12(月)18:02

Visual Studio 2019 の C# でアプリを作ってみた

作りモノ(211)

今日は晴れ時々曇りでそこそこ暑かった。 朝から仏壇の掃除をして、フナ水槽の掃除をしました。お盛りもんと花をセッティングすれば、お盆の準備は何とかなりそうです。 フナ水槽はキレイになった その後、Arduino Uno 互換ボード+センサで作ってる温湿度計の制御を Windows 側から行うアプリケーションを作ってみようと思い、Visual Studio 2019をインストール。C++かC#でWindowsアプリをビルドできるようなオプションでインストールしてみました。調べてみるとC#の方が敷居が低そうなので、C#でチャレンジすることに。 やりたいのはArduinoとのシリアル通信をGUIで行うこと。Webの情報を色々調べてみると、C#フォームプログラムでのシリアル通信の仕方というページがあったので、ここを参考に作ることにしました。が、Visual Studio 2019ではWindowsフォームでのプロジェクト作成ができないようで(ホントかな?(^^;)、WPFとかいう形式でWindowsアプリを作り始めました。 大体のところは参考にしたページの内容を読めば分かったんですが、シリアル受信のデータをテキストボックスに貼り付けようとして、ハタと困ってしまいました。(^^;; WindowsフォームではテキストボックスのInvokeRequiredプロパティを見て、何やらInvokeしてごにょごにょする(まだ理解できてない(^^;;)のですが、WPFでInvokeRequiredプロパティが無いのです。うーむ、分からん... と調べてると、c# – WpfでInvokeRequiredっちゅうページが見つかりました。すると、何やらディスパッチャにInvokeメソッドがあるので、ごにゃごにゃ(まだ理解できてない)と書いてありました。それを頼りに何とかシリアル受信データをテキストボックスに貼り付けることができました。コードは下記のようになったのですが、ちゃんと理解できてない... (^^;; delegate void SetTextCallback(string text); private void Response(string text) { if (textRX.Dispatcher.CheckAccess() == false) { SetTextCallback d = new SetTextCallback(Response); Dispatcher.Invoke(d, new object[] { text }); } else { textRX.AppendText(text); } } private void portA_DataReceived(object sender, SerialDataReceivedEventArgs e) { if (portA.IsOpen == true) { try { string str = portA.ReadExisting(); Response(str); } catch (Exception ex) { MessageBox.Show(ex.Message); } } else { return; } } こんなんでいいんやろか... (^^;; と思いつつも、何とかアプリは形になり、Arduino側に送るコマンドのインターフェースやテキストボックス内容の保存もできるようになりました。テキストボックス内容の保存で参考にした(ほぼパクった(^^;;)ページはC#で「名前を付けて保存」ダイアログを使ってみたです。参考になりました。ありがとうございました。 っちゅうことで、今現在のアプリの外観はこんな感じ。 殺風景な見た目やけど機能的には問題ない(^^;; Arduinoが専用のアプリで制御できると操作が楽ちんになって良いです。C#でのアプリづくりもナカナカおもしろいです。 --- 18:00 ---

続きを読む

このブログでよく読まれている記事

もっと見る

総合記事ランキング

もっと見る