質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

Q&A

解決済

5回答

4842閲覧

シリアル通信で、自動でcheckboxをチェックしたい

ncncup

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

0グッド

0クリップ

投稿2016/07/22 05:26

編集2016/07/26 04:21

初心者です。ご質問です。
ビジュアルスタジオ2015でC#を使っています。Windows Formsです。
シリアル通信でパソコンからデータを送って豆電球を光らすということをやっているのですが、
テキストボックスに"a1"と入力して送信したときに
豆電球1を光らせてcheckBox1を自動チェックする、
テキストボックスに"b1"と入力して送信したときに
豆電球2にデータを送ってcheckBox2を自動でチェックさせたいのですが、

どなたかご教授お願いいたします。

データの送信と、テキストボックスの文字を判定してチェックボックスをチェックさせるやり方はできます。
データが豆電球に送られたら自動でcheckBoxをチェックさせるという風にしたいです。
よろしくお願いいたします。

private void richTextBox2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{

//! シリアルポートをオープンしていない場合、処理を行わない if (serialPort1.IsOpen == false) { return; } //! テキストボックスから、送信するテキストを取り出す String data = richTextBox2.Text; //! 送信するテキストがない場合、データ送信は行わない if (string.IsNullOrEmpty(data) == true) { return; } try { //! シリアルポートからテキストを送信する. serialPort1.Write(data +"\n"); //入力された16進数文字列を数値に変換 int value = Convert.ToInt32(data, 16); for (int i = 1; i <= 16; i++) { //画面上の処理対象チェックボックスコントロールを特定 Control[] cs = this.Controls.Find("CheckBox" + i.ToString(), true); //チェック対象ビットに1が立っていればチェックオン、0ならチェックオフ ((CheckBox)cs[0]).Checked = ((value & (1 << (i - 1))) > 0); } //! 送信データを入力するテキストボックスをクリアする. richTextBox2.Clear(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } }

デバックして16進数の文字"ffff"と入力して送信すると、
豆電球16個はつくのですけど、
認識できる数値が見つかりませんでした
と表示されてしまいます。対処法をご教授ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2016/07/22 05:35

パソコンとシリアル通信でつながっている装置には、豆電球を光らせるデータを受けたことを検出して、それをシリアル通信で送り返す機能があるのでしょうか? 豆電球1という装置と、豆電球2という装置があって、それぞれが別々のシリアル通信線でパソコンと接続されているという構成でしょうか? 装置の接続状況と、装置の機能を明らかにしてください。
ncncup

2016/07/22 05:48

ご指摘ありがとうございます。 そのような機能はあります。 一つの装置に豆電球1と豆電球2があり、その装置を一つの通信線でパソコンに接続しています。 よろしくお願いいたします。 通信自体はできます。通信して豆電球を光らせた時に、Windows Forms アプリのチェックボックスをチェック状態にしたいです。 よろしくお願いいたします。
coco_bauer

2016/07/26 06:05

また、質問が変わっています。 異なる質問をするなら、新たに質問してください。
ncncup

2016/07/26 06:23

新しく質問させていただきました。
guest

回答5

0

掲示の質問内容では、ハードウェア(物)が絡む場合は、
掲示不足です。以下の内容でも足りない位です。
(回答者は、貴方の隣に居て、横から一緒に看ている分けではありません、
掲示板に書かれた事から、推測するだけです。)

Text

1PC:シリアル通信 <--------> シリアル通信端末:豆電球1、豆電球2 2 :VS2015/C#、Windows Formプロジェクト 3 :画面上のコントロール 4 : CheckBox1 / CheckBox2 5 : 他には?、 6 : 豆電球1、豆電球2、(機能があれば):点灯、消灯、全消灯 7 : 実行、終了 8PCと、端末側のコマンド、レスポンス 9 10 コマンド:a1 --------> シリアル通信端末:豆電球1-ON 、豆電球2-OFF? 11 <-------- レスポンス:不明、掲示が無い。 12 コマンド:a2 --------> シリアル通信端末:豆電球1-OFF?、豆電球2-ON 13 <-------- レスポンス:不明、掲示が無い。 14 コマンド:消灯 --------> シリアル通信端末:豆電球1-OFF 、豆電球2-OFF 15 <-------- レスポンス:不明、掲示が無い。 16 17端末のレスポンスの有無、 18別なコマンドに、状態のレスポンスが有るか、 19レスポンスの内容に、操作結果があるかどうか 20 無の場合:コマンド送付時に、コマンド出したよ、点灯した筈。というプログラム 21有りの場合では、何が返って来るかで、 22 有り&状態がある。状態によりPC側の画面書換可能 23 有り&別コマンドで状態取得可能:状態により、チェックを付ける。 24 有り&状態がない、コマンドも無い。無の場合と同様 25 26PC側で行う事、出来る事が変わります。 27
コード

↑の様な書式は、投稿時の、</>:コードを押して、「ここに言語を入力:Text」として下さい。
3分でわかるteratail:シンタックスハイライト・マークダウン

投稿2016/07/25 02:36

編集2016/07/25 02:46
daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Windows Formsを使うのですから、イベント(例えば「ボタン1をクリックした」という操作によって起動されるプログラム)を利用する事になります。
mainから始まって順に実行されていくスタイルとは少し雰囲気が違います。

以下のような要素を含むフォーム FormLamp を想定します。
ボタン:
onButton1 : 豆電球1を点灯するボタン。クリックするとonButton1_clickが起動。
onButton2 : 豆電球2を点灯するボタン。クリックするとonButton2_clickが起動。
offButton1 : 豆電球1を消灯するボタン。クリックするとoffButton1_clickが起動。
offButton2 : 豆電球2を消灯するボタン。クリックするとoffButton2_clickが起動。

チェックボックス:
checkBox1
checkBox2

シリアル通信:
serialPort1

===
動作のシナリオ:
<FormLamp>
onButton1がクリックされたら、シリアル通信で"a1"を送信する。そして、checkbox1にマークする。
onButton2だと"a2"を送信する。そしてcheckbox2にマークする
offButon1がクリックされたら、シリアル通信で"b1"を送信する。そして、checkbox1のマークを消す。
onButton2だと"b2"を送信する。そしてcheckbox2にマークを消す。

<相手装置>以下のような動作をするものと想定
シリアル通信で、"a1"を受信したら、豆電球1を点灯。"a2"だと豆電球2を点灯。"b1"を受信したら、豆電球1を消灯。"b2"だと豆電球2を消灯。

そうすると、コードは以下のような感じになります。
本筋でないところは、適宜省略しています。略した箇所は、コメントで(略)と書きます。

public partial class FormLamp : Form { private void FormLamp_Load( object sender, EventArgs e) //フォームが読み込まれる際のイベントです。初期化のコードを書きます。 { // シリアルポートのオープン serialPort1.PortName = "COM11"; // ここにシリアルポートの設定(通信速度指定、ストップビット等々)のコードを書きます(略) // シリアルポートのオープン serialPort1.Open(); } private void FormLamp_FormClosed( object sender, FormClosedEventArgs e) // Formが閉じられる際のイベントです。後始末のコードを書きます。 { // シリアルポートのクローズ serialPort1.Close(); } private void onButton1_Click( object sender, EventArgs e) { // シリアルポートに豆電球1点灯のコマンドを送信 Byte[] dat = = System.Text.Encoding.ASCII.GetBytes("a1"); serialPort1.Write(dat, 0, dat.GetLength(0)); //シリアル通信で"a1"を送信 checkbox1.checked = True; //checkbox1をマークする } // onButton2_Click,offButton1_Click,offButton2_Clickも同様。シリアル通信で送る文字列と、チェックボックスの操作が違うだけです。(略) }

投稿2016/07/23 00:26

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ncncup

2016/07/24 13:39

とても細かい説明とコードの返答ありがとうございます。返信遅くなってしまいすみません 。 private void sndButton_Click(object sender, EventArgs e) { //! シリアルポートをオープンしていない場合、処理を行わない. if( serialPort1.IsOpen == false ){ return; } //! テキストボックスから、送信するテキストを取り出す. String data = sndTextBox.Text; //! 送信するテキストがない場合、データ送信は行わない. if( string.IsNullOrEmpty( data ) == true ){ return; } try { //! シリアルポートからテキストを送信する. serialPort1.Write( data ); } catch ( Exception ex ){ MessageBox.Show( ex.Message ); } } data = a1 として ボタンを使わずに、テキストボックスに ”a1”と入力して送信ボタンを押して送信した時に、豆電球1は点灯し、Windows Formsのチェックボックス1も自動でチェック状態にしたい、テキストボックス送信とチェックボックスを連動させたいのですが、 説明が下手で申し訳ないのですがよろしくお願いいたします。
coco_bauer

2016/07/25 01:45

元の質問からは、想像できませんね。 ちゃんと、質問を書いてください。 質問に必要な すべてが書かれていないのに、回答を求めるのは傲慢ではありませんか?
ncncup

2016/07/25 02:01

すみません。まだ初心者で経験も浅いんでこのような形になってしまいました。 ご指摘ありがとうございます。
guest

0

プログラムは1行も作っていないのですか?
何か作っているのでしたら、動かなくてもいいので開示して下さい。

投稿2016/07/22 11:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ncncup

2016/07/24 13:27

ご返答ありがとうございます。返信が遅くなってしまってすみません。 private void sndButton_Click(object sender, EventArgs e) { //! シリアルポートをオープンしていない場合、処理を行わない. if( serialPort1.IsOpen == false ){ return; } //! テキストボックスから、送信するテキストを取り出す. String data = sndTextBox.Text; //! 送信するテキストがない場合、データ送信は行わない. if( string.IsNullOrEmpty( data ) == true ){ return; } try { //! シリアルポートからテキストを送信する. serialPort1.Write( data ); } catch ( Exception ex ){ MessageBox.Show( ex.Message ); } } data = a1 として テキストボックスに a1 と入力して送信した場合に 豆電球1は点灯され、Windows Formsのチェックボックス1が自動でチェック状態になる、 すなわちコマンド入力送信とチェックボックスを連動させたいです。 説明が下手で申しわけないのですがよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2016/07/24 15:22 編集

スマホで入力しているのでミスがあるかもしれませんが。 try { //! シリアルポートからテキストを送信する. serialPort1.Write( data ); Switch(data) { case "a1": checkBox1.Checked = true; checkBox2.Checked = false; break; case "a2": checkBox1.Checked = false; checkBox2.Checked = true; break; default; break; } }
ncncup

2016/07/25 00:49

返答ありがとうございます。コードもありがとうございます。 これだとテキストボックスに”a1” と入力しないとチェックボックスにチェックがつかないんですけど、 serialPort1.Write( a1);という通信が行われたら(豆電球に通信されたら) チェックボックスを自動でチェックさせる方法はないでしょうか? よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2016/07/25 01:47 編集

テキストボックスに入力しないで、他の方法で送信できるのですか? どうも仕様がよくわかりません。 送信するFormの絵と、豆電球の付いているのは何かの装置なのか、あるいは別のPCなのかを教えて下さい。
ncncup

2016/07/25 02:42

private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (serialPort1.IsOpen == false) { return; } CheckBox chkBox = (CheckBox)sender; if (chkBox.Checked) { serialPort1.Write("a1"); } else { serialPort1.Write("b1"); } } チェックボックスでの送信ができるのですけどこれとは逆に、 もし豆電球1にデータが送られたら、チェックボックス1を自動チェックさせる If文かなんかないでしょうか? 装置は普通の豆電球です。豆電球は16個あるのでテキストの文字での判別は 通りが何通りもあって、コードがすごく長くなってしまうので、豆電球1にデータが送られたら、チェックボックスをチェックさせる、という風にしたいです。
退会済みユーザー

退会済みユーザー

2016/07/25 05:22 編集

元の質問から全くかけ離れている、というか隠されている事が多過ぎるので、仕様を充分に整理して新規に質問して下さい。 例えば、 1)豆電球は何個あるのか 2)点灯/消灯はどういうふうにするのか 3)複数同時点灯/消灯はできるのか 4)プログラムが起動された時の電球の点灯/消灯は、制御するのか
ncncup

2016/07/25 12:53

ありがとうございます。 そうすることにします。
guest

0

豆電球1にデータを送って光らせた時はcheckBox1を自動チェックする、

豆電球2にデータを送って光らせた時はcheckBox2を自動でチェックさせたいのですが、

そもそもで申し訳ないのですが、
「「豆電球Xを光らせる処理」で、豆電球Xにデータを送り、checkBoxXをチェックする。」
で良いのでは?


C#

1try { 2 //! シリアルポートからテキストを送信する. 3 serialPort1.Write( data ); 4 // ここにdataが"a1"だったらcheckbox1をチェックする処理。 5}

投稿2016/07/22 08:00

編集2016/07/24 14:01
ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ncncup

2016/07/22 08:03

ありがとうございます。 はい。そのような文の書き方がわからなくて教えていただけませんか? よろしくお願いいたします。
ozwk

2016/07/22 08:10

いや、豆電球Xにデータを送る処理がどこかにあるんですよね? その処理にチェックボックスの操作を書き足せばいいだけでは?
ncncup

2016/07/24 13:48

返答ありがとうございます。返信遅くなってしまいすみません。 private void sndButton_Click(object sender, EventArgs e) { //! シリアルポートをオープンしていない場合、処理を行わない. if( serialPort1.IsOpen == false ){ return; } //! テキストボックスから、送信するテキストを取り出す. String data = sndTextBox.Text; //! 送信するテキストがない場合、データ送信は行わない. if( string.IsNullOrEmpty( data ) == true ){ return; } try { //! シリアルポートからテキストを送信する. serialPort1.Write( data ); } catch ( Exception ex ){ MessageBox.Show( ex.Message ); } } data = a1 として テキストボックスに a1 と入力して送信した場合、豆電球1は点灯するのですが、 Windows Formsに用意してあるチェックボックス1が自動でチェック状態にしたくて いろいろ試しているのですがなかなかうまくいきません。 テキスト入力送信とチェックボックスを連動させたいです。 説明が下手で申し訳ないのですが、 なにか解決策があったらご教授ください。よろしくお願いいたします。
ozwk

2016/07/24 14:16 編集

送るデータはdataに入っているんだから それが"a1"(など)か判定すればよいです。 やりたいことがこれであっているのか不安になってきました。
ncncup

2016/07/25 00:56

返答ありがとうございます。 private void checkBox1_CheckedChanged(object sender, EventArgs e) { if (serialPort1.IsOpen == false) { return; } CheckBox chkBox = (CheckBox)sender; if (chkBox.Checked) { serialPort1.Write("a1"); } else { serialPort1.Write("b1"); } } この上記のコードだとチェックボックスをチェックしたら、”a1”データを送るってものなんですけど、これの逆で データが送られたらチェックボックスを自動チェックさせたいのですが、 初心者で何度もの質問ですみません。よろしくお願いいたします。
ozwk

2016/07/25 01:08 編集

私(や他の方)の回答があなたのやりたいこととどう違うんですか?
ncncup

2016/07/25 01:31

テキストボックスの文字を判定してチェックする方法ではなく、 単純にもし豆電球1にデータが送られたらチェックボックス1を自動でチェックさせる方法が知りたいです。 よろしくお願いいたします。
ozwk

2016/07/25 01:54

SerialPortクラスを継承なり移譲なりして Writeメソッドが呼ばれたら書き込む文字列を渡すイベントが発生するようにして そのイベントで書き込む文字列を判定すればできます。 しかし手間な上に結局やっていることがあまり変わらないです。
ncncup

2016/07/25 12:53

ありがとうございます。 試させてもらいます。
guest

0

ベストアンサー

チェックボックスをONにするだけなら

c#

1//豆電球1を光らせた 2this.checkBox1.Checked = true; 3 4//豆電球2を光らせた 5this.checkBox2.Checked = true; 6

と書くだけです

恐らく、豆電球1を点灯するコマンド、豆電球2を点灯するコマンド、があって、相手装置はそれらコマンドを受信したら自身のいずれかのランプをONにする仕組みがあるのでしょう

具体的にプログラムのどの部分にどう書けばよいかまでアドバイスが欲しいようでしたら、ソースを開示ください


(追記)

「シリアルポートからテキストを送信する」の処理の後に、テキストボックスの中身を判定して、該当するチェックボックス側をオンにすればよいと思います
こんな感じに

c#

1try { 2 //! シリアルポートからテキストを送信する. 3 serialPort1.Write( data ); 4 switch( data ) { 5 case "a1": 6 //豆電球1を光らせた 7 this.checkBox1.Checked = true; 8 break; 9 case "a2": 10 //豆電球2を光らせた 11 this.checkBox2.Checked = true; 12 break; 13 default: 14 break; 15 } 16 }

ただし、これだとオフにするタイミングが無いですね
それは大丈夫でしょうか?

ケース1:豆電球は手動で何かをするまで消えないようにできている(電源をオフにする、リセットボタンを押すなど)

→ アプリ側で豆電球の状態を知る方法が無ければ、チェックボックスも手動でオフにするしかないでしょう

ケース2:豆電球はどちらか一方しか点灯しないようにできている(たとえば豆電球1を点灯後、豆電球2をつづけて点灯させると、豆電球1が自動で消える)

→ チェックボックスのオンオフ状態も合わせた方がよいかもしれませんね
具体的には、片方のチェックボックスをオン(true)にしたタイミングにもう片方のチェックボックスをオフ(false)にしてあげればよいでしょう


(追記2)

やること
・エディットボックスに入力される16進数値からビットパターンを抽出
・ビットごとに割り当てられた16個のチェックボックスのON/OFF処理をする

前提
・エディットボックスに入力される文字は 0000 ~ ffff とします(f の場合は 000f と扱います)
・チェックボックスの名前は「checkBox1~checkBox16」と想定します

ざっくりとこんな感じに書けます

c#

1try { 2 //! シリアルポートからテキストを送信する. 3 serialPort1.Write( data ); 4 5 //入力された16進数文字列を数値に変換 6 int value = Convert.ToInt32(data, 16); 7 //1ビット目~16ビット目まで処理 8 for( int i = 1; i <= 16; i++) { 9 //画面上の処理対象チェックボックスコントロールを特定 10 Control[] cs = this.Controls.Find("CheckBox" + i.ToString(), true); 11 //チェック対象ビットに1が立っていればチェックオン、0ならチェックオフ 12 ((CheckBox)cs[0]).Checked = ((value & (1 << (i - 1))) > 0); 13 } 14}

正常ルートだけならこれで動くと思います
必要なら、異常判定処理を追加してください

投稿2016/07/22 07:25

編集2016/07/26 01:31
takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ncncup

2016/07/22 07:51

ありがとうございます。 serialPort1.Write("a1" )  //もしシリアルポートから豆電球1に(a1 = 光らせるコマンド)データを送り光らせたら、  this.checkBox1.Checked = true;  serialPort1.Write("a2" )  //もしシリアルポートから豆電球1に(a2 = 光らせるコマンド)データを送ったら、 this.checkBox2.Checked = true; としたいのですが、書き方がわかりません。よろしくお願いいたします。
takito

2016/07/22 08:06

すみません、その部分だけではよくわかりません。処理の流れが見えないと何をどうしたいのか・・・。プログラムの全体は大きいのでしょうか? serialPort1.Write("a1" ) serialPort1.Write("a2" ) の書かれている周辺のプログラムを、質問の部分に追記いただければと思います。 質問の方でコードを書くときは</>のアイコンを使ってください。
ncncup

2016/07/24 13:20

返答ありがとうございます。返事が遅くなってしまい申し訳ないです。 private void sndButton_Click(object sender, EventArgs e) { //! シリアルポートをオープンしていない場合、処理を行わない. if( serialPort1.IsOpen == false ){ return; } //! テキストボックスから、送信するテキストを取り出す. String data = sndTextBox.Text; //! 送信するテキストがない場合、データ送信は行わない. if( string.IsNullOrEmpty( data ) == true ){ return; } try { //! シリアルポートからテキストを送信する. serialPort1.Write( data ); } catch ( Exception ex ){ MessageBox.Show( ex.Message ); } } data = a1 として テキストボックスに a1 と入力して送信した場合にチェックボックス1も自動でチェックしたい、チェックボックス1と連動させたいのですが、 説明がへたくそで申し訳ないのですがよろしくお願いいたします。
ncncup

2016/07/25 01:28

詳しい説明ありがとうございます。この方法も使わせていただきます。 テキストボックスの文字を判定してチェックさせるやり方ではなく、 単純にもし豆電球1にデータが送られたらチェックさせるという方法はないでしょうか?
takito

2016/07/25 01:46

そのおっしゃるところの「単純に」というのは、具体的にどのようなイメージなのでしょうか? 「豆電球1にデータが送られたら」ということを判断する”決め手”が、data変数に入ってくる"a1""a2"という情報しかありませんので他の方法は思いつきません
ncncup

2016/07/25 02:21

serialPort1.Write( a1 );   この文で豆電球1にデータを送ったら CheckBox.Checked = true; チェックボックスをチェックする もし豆電球1にデータが送られたら、チェックボックス1をチェックするという If文かなんか使ってできないでしょうか?
takito

2016/07/25 03:17

>もし豆電球1にデータが送られたら、チェックボックス1をチェックするという >If文かなんか使ってできないでしょうか? どのような問題があって、そのようなやり方にこだわるのでしょうか? serialPort1.Write( a1 ); というコードは書かれていません serialPort1.Write( data ); なら書かれています 今やろうとしているプログラムは ・テキストボックスにコマンドを入力する ・送信ボタンを押す ・入力されたコマンドをシリアル通信で伝送する ということですね 何を送信したかを知る手段は data という変数の中身にしかありませんので、文字比較をする以外に方法はありません。
ncncup

2016/07/25 05:14

毎回の回答ありがとうございます。 豆電球が16個ありまして、テキストボックスに16進数の文字を入力して豆電球1,2,3を点灯させたり、豆電球3、5、7、9を点滅させて、その点滅させた豆電球の番号と、チェックボックスの番号を連動させてチェックさせたいのです。
takito

2016/07/25 06:36

なんだか話が広がってきましたね・・・16個の豆電球のオンオフをコマンドで制御するので、そのコマンド内容から点灯パターンをチェックボックスで表現したかったのですね? たとえばこんな感じに概要をまとめられるでしょうか 装置の全体像 ・豆電球が16個あり、シリアル通信によるコマンド入力で点灯消灯が制御できる アプリの全体像 ・コマンド入力用のエディットボックスとコマンド送信ボタンがあり、豆電球1~16に対応する16個のチェックボックスがある 装置とアプリの関係 ・アプリでコマンド値(16進数)を入力して送信ボタンを押すとシリアル通信でそのコマンドを送出する ・コマンド値は豆電球のオンオフをビットパターンで表していて、0x0001=豆電球1~0x8000=豆電球16に対応している(ここは想像ですがあってますか?) ・コマンド送信を実行すると、コマンド値でビットが1になっている豆電球について、アプリ側ではチェックボックスがオンになり装置側では豆電球が点灯する(ビットが0ならチェックがオフ、豆電球が消灯) そして、本当にやりたいことと質問は、 「テキストボックスに16進数の文字を入力して豆電球1,2,3を点灯させたり、豆電球3、5、7、9を点滅させて、その点滅させた豆電球の番号と、チェックボックスの番号を連動させてチェックさせたいです」 「今のプログラムにどう書き足せばよいでしょうか」 という解釈であっていますか?
ncncup

2016/07/25 13:01

返答ありがとうございます。返信が遅くなってしまいすみません。 まさにその通りです。説明の仕方が下手でいろいろ困らせてしまいすみません。 16進数のコマンド入力で点灯した豆電球の番号と、チェックボックスの番号を連動させてチェックさせたいです。これがどの様に書けばわからなくって。 ありがとうございます。よろしくお願いいたします。
takito

2016/07/26 01:31

追記しましたのでご確認ください
ncncup

2016/07/26 02:08

コードありがとうございます。 認識可能な数値が見つかりませんでした。 と表記されてしまうのですが、これはどういったことでしょうか? いろいろ調べたのですが、なかなかでてきません。 お助けください。よろしくお願いいたします。
ncncup

2016/07/26 02:19

ffffと入力して送信すると、豆電球はちゃんと全部点灯するのですが、 送信した直後に”認識可能な数値が見つかりませんでした” とでてしまいます。
takito

2016/07/26 02:59

文字通り、入力した文字に数値に変換できないものがあった、のだと思います ToInt32 で例外発生しているのでしょう 実際に入力しているコマンド文字列は、私の想定している4ケタの半角文字だけですか? コードを追加したプログラムを最初の質問投稿に追記して開示ください ところで 1から10までサポートすることは難しいです Visual Studio でブレークポイントを置いて、変数にどんな値が入っているのか確認しながらステップを進めていけば、何が問題かわかると思います もう少しご自身でデバッグし問題解決できるだけの技術を身に着けましょう
ncncup

2016/07/26 04:16

ありがとうございます。 まだ始めたばかりですので、これから勉強して技術を付けていきたいと思っています。 実際に入力している文字は ”mh,ffff”です。 コードを質問投稿に追記しておきます。よろしくお願いいたします。
takito

2016/07/26 07:16 編集

入力した値からチェックボックスのオンオフの状態を変化させようとしているので、「何を入力するか」というのはとても重要な情報です 0000 や ffff という 4文字だけの入力 を想定していたので、”mh,ffff” という入力ではうまくいきませんよ システムというのは、入力、処理、出力の3つから成り立っています 質問をするときは、持っている情報を公表できる範囲でしっかり出しましょう さて、解決方法ですが、別の質問を立てられたようなのでこちらではここまでとします 質問を閉じて別質問の方で進めてくださいね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問