teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記2

2016/07/26 01:31

投稿

takito
takito

スコア3116

answer CHANGED
@@ -52,3 +52,35 @@
52
52
    具体的には、片方のチェックボックスをオン(true)にしたタイミングにもう片方のチェックボックスをオフ(false)にしてあげればよいでしょう
53
53
 
54
54
 
55
+ ---
56
+ (追記2)
57
+
58
+ やること
59
+ ・エディットボックスに入力される16進数値からビットパターンを抽出
60
+ ・ビットごとに割り当てられた16個のチェックボックスのON/OFF処理をする
61
+
62
+ 前提
63
+ ・エディットボックスに入力される文字は 0000 ~ ffff とします(f の場合は 000f と扱います)
64
+ ・チェックボックスの名前は「checkBox1~checkBox16」と想定します
65
+
66
+ ざっくりとこんな感じに書けます
67
+
68
+ ```c#
69
+ try {
70
+ //! シリアルポートからテキストを送信する.
71
+ serialPort1.Write( data );
72
+
73
+ //入力された16進数文字列を数値に変換
74
+ int value = Convert.ToInt32(data, 16);
75
+ //1ビット目~16ビット目まで処理
76
+ for( int i = 1; i <= 16; i++) {
77
+ //画面上の処理対象チェックボックスコントロールを特定
78
+ Control[] cs = this.Controls.Find("CheckBox" + i.ToString(), true);
79
+ //チェック対象ビットに1が立っていればチェックオン、0ならチェックオフ
80
+ ((CheckBox)cs[0]).Checked = ((value & (1 << (i - 1))) > 0);
81
+ }
82
+ }
83
+ ```
84
+
85
+ 正常ルートだけならこれで動くと思います
86
+ 必要なら、異常判定処理を追加してください

1

追記

2016/07/26 01:31

投稿

takito
takito

スコア3116

answer CHANGED
@@ -12,4 +12,43 @@
12
12
 
13
13
  恐らく、豆電球1を点灯するコマンド、豆電球2を点灯するコマンド、があって、相手装置はそれらコマンドを受信したら自身のいずれかのランプをONにする仕組みがあるのでしょう
14
14
 
15
- 具体的にプログラムのどの部分にどう書けばよいかまでアドバイスが欲しいようでしたら、ソースを開示ください
15
+ 具体的にプログラムのどの部分にどう書けばよいかまでアドバイスが欲しいようでしたら、ソースを開示ください
16
+
17
+ ---
18
+ (追記)
19
+
20
+ 「シリアルポートからテキストを送信する」の処理の後に、テキストボックスの中身を判定して、該当するチェックボックス側をオンにすればよいと思います
21
+ こんな感じに
22
+
23
+ ```c#
24
+ try {
25
+ //! シリアルポートからテキストを送信する.
26
+ serialPort1.Write( data );
27
+ switch( data ) {
28
+ case "a1":
29
+ //豆電球1を光らせた
30
+ this.checkBox1.Checked = true;
31
+ break;
32
+ case "a2":
33
+ //豆電球2を光らせた
34
+ this.checkBox2.Checked = true;
35
+ break;
36
+ default:
37
+ break;
38
+ }
39
+ }
40
+ ```
41
+
42
+ ただし、これだと`オフにするタイミング`が無いですね
43
+ それは大丈夫でしょうか?
44
+
45
+ ケース1:豆電球は手動で何かをするまで消えないようにできている(電源をオフにする、リセットボタンを押すなど)
46
+
47
+ → アプリ側で豆電球の状態を知る方法が無ければ、チェックボックスも手動でオフにするしかないでしょう
48
+
49
+ ケース2:豆電球はどちらか一方しか点灯しないようにできている(たとえば豆電球1を点灯後、豆電球2をつづけて点灯させると、豆電球1が自動で消える)
50
+
51
+ → チェックボックスのオンオフ状態も合わせた方がよいかもしれませんね
52
+   具体的には、片方のチェックボックスをオン(true)にしたタイミングにもう片方のチェックボックスをオフ(false)にしてあげればよいでしょう
53
+
54
+