回答編集履歴

1

更新

2023/12/15 09:59

投稿

TN8001
TN8001

スコア9825

test CHANGED
@@ -30,32 +30,57 @@
30
30
  {
31
31
  public partial class Form1 : Form
32
32
  {
33
+ private DataGridView dataGridView1;
34
+ private Timer timer1;
35
+ private object handle;
36
+
33
37
  public Form1()
34
38
  {
35
39
  InitializeComponent();
36
40
 
41
+ dataGridView1 = new DataGridView
42
+ {
43
+ AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,
44
+ Dock = DockStyle.Fill,
45
+ Parent = this,
46
+ };
47
+
48
+ dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "Board", });
49
+
50
+ for (int i = 1; i <= 8; i++)
51
+ dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = $"in {i}", });
52
+
37
53
  dataGridView1.Rows.Add("hoge");
38
54
  dataGridView1.Rows.Add("fuga");
55
+ dataGridView1.Rows.Add("piyo");
39
56
 
57
+
58
+ timer1 = new Timer { Interval = 1000, };
59
+ timer1.Tick += Timer1_Tick;
40
60
  timer1.Start();
41
61
  }
42
62
 
43
- private object handle;
44
63
  private void Timer1_Tick(object sender, EventArgs e)
45
64
  {
46
65
  int xInput = Top16.GetInputs(handle);
47
66
 
48
67
  // 0埋めで8桁取得(上位桁の0を取り逃さないように)
49
68
  string binaryStr = Convert.ToString(xInput, 2).PadLeft(8, '0');
50
- Debug.WriteLine(binaryStr);
51
69
 
70
+ // 確認用(出力ウィンドウ)
71
+ Debug.Write($"\n{binaryStr}");
72
+ Debug.Write($" →逆順 {string.Join("", binaryStr.Reverse())}");
73
+ Debug.WriteLine($" →反転 {string.Join("", binaryStr.Reverse().Select(x => x == '0' ? '1' : '0'))}");
74
+
75
+
76
+ // hoge行の処理
52
77
  int count = 0;
53
78
  foreach (char inputBinaryNum in binaryStr.Reverse()) // 右が1なのでひっくり返す
54
79
  {
55
80
  count++;
56
- if (inputBinaryNum == '0')
81
+ if (inputBinaryNum == '0') // 0だったら入力有
57
82
  {
58
- Debug.WriteLine($"Input{count}");
83
+ Debug.Write($"Input{count}, ");
59
84
  dataGridView1.Rows[0].Cells[count].Style.BackColor = Color.Blue;
60
85
  }
61
86
  else
@@ -63,27 +88,68 @@
63
88
  dataGridView1.Rows[0].Cells[count].Style.BackColor = Color.White;
64
89
  }
65
90
  }
91
+ Debug.WriteLine("");
66
92
 
67
93
 
68
-
94
+ // fuga行の処理
69
95
  Flag flag = (Flag)~xInput; // 各ビット反転してenumにキャスト
70
96
  Debug.WriteLine(flag);
71
97
 
72
- var row = dataGridView1.Rows[1];
98
+ var row1 = dataGridView1.Rows[1];
73
99
 
74
100
  // ループにしずらいのでこういうのは向かないかなw
101
+ if (flag.HasFlag(Flag.Input1)) row1.Cells[1].Style.BackColor = Color.Blue;
75
- row.Cells[1].Style.BackColor = flag.HasFlag(Flag.Input1) ? Color.Blue : Color.White;
102
+ else row1.Cells[1].Style.BackColor = Color.White;
103
+ // 以下同じ意味
76
- row.Cells[2].Style.BackColor = flag.HasFlag(Flag.Input2) ? Color.Blue : Color.White;
104
+ row1.Cells[2].Style.BackColor = flag.HasFlag(Flag.Input2) ? Color.Blue : Color.White;
77
- row.Cells[3].Style.BackColor = flag.HasFlag(Flag.Input3) ? Color.Blue : Color.White;
105
+ row1.Cells[3].Style.BackColor = flag.HasFlag(Flag.Input3) ? Color.Blue : Color.White;
78
- row.Cells[4].Style.BackColor = flag.HasFlag(Flag.Input4) ? Color.Blue : Color.White;
106
+ row1.Cells[4].Style.BackColor = flag.HasFlag(Flag.Input4) ? Color.Blue : Color.White;
79
- row.Cells[5].Style.BackColor = flag.HasFlag(Flag.Input5) ? Color.Blue : Color.White;
107
+ row1.Cells[5].Style.BackColor = flag.HasFlag(Flag.Input5) ? Color.Blue : Color.White;
80
- row.Cells[6].Style.BackColor = flag.HasFlag(Flag.Input6) ? Color.Blue : Color.White;
108
+ row1.Cells[6].Style.BackColor = flag.HasFlag(Flag.Input6) ? Color.Blue : Color.White;
81
- row.Cells[7].Style.BackColor = flag.HasFlag(Flag.Input7) ? Color.Blue : Color.White;
109
+ row1.Cells[7].Style.BackColor = flag.HasFlag(Flag.Input7) ? Color.Blue : Color.White;
82
- row.Cells[8].Style.BackColor = flag.HasFlag(Flag.Input8) ? Color.Blue : Color.White;
110
+ row1.Cells[8].Style.BackColor = flag.HasFlag(Flag.Input8) ? Color.Blue : Color.White;
111
+
83
112
 
84
113
  // 複数条件はわかりやすい
85
- if (flag.HasFlag(Flag.Input1) && flag.HasFlag(Flag.Input3))
114
+ //if (flag.HasFlag(Flag.Input1) && flag.HasFlag(Flag.Input3)) row.Cells[3].Style.BackColor = Color.Red;
115
+ // ↑↓意味は同じ
116
+ if (flag.HasFlag(Flag.Input1 | Flag.Input3)) row1.Cells[3].Style.BackColor = Color.Red;
117
+
118
+ // 意味のある名前を付けたければこうでもいい
119
+ //if (flag.HasFlag(Flag.Input1_and_3)) row.Cells[3].Style.BackColor = Color.Red;
120
+
121
+
122
+ //// piyo行の処理
123
+ //var row2 = dataGridView1.Rows[2];
124
+
125
+ //for (var i = 1; i <= 8; i++)
126
+ //{
86
- row.Cells[3].Style.BackColor = Color.Red;
127
+ // row2.Cells[i].Style.BackColor = Color.White;
128
+
129
+ // // インデックス(C# 8.0以上)
130
+ // // [インデックス/範囲処理 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C](https://ufcpp.net/study/csharp/data/dataranges/)
131
+ // if (binaryStr[^i] == '0') row2.Cells[i].Style.BackColor = Color.Blue;
132
+ //}
133
+
134
+ //// リスト パターン(C# 11以上)
135
+ //// [パターン マッチング - C# によるプログラミング入門 | ++C++; // 未確認飛行 C](https://ufcpp.net/study/csharp/datatype/patterns/?p=2#list)
136
+ //row2.Cells[3].Style.BackColor = binaryStr switch
137
+ //{
138
+ // // Input1・Input3の入力があり、Input8の入力がなければ。。。
139
+ // ['1', .., '0', _, '0'] => Color.Green,
140
+
141
+ // // Input1・Input3(・Input8)の入力があれば。。。
142
+ // // ↑に当てはまらない時なのでここに入るのはInput8もONなことになる
143
+ // [.., '0', _, '0'] => Color.Red,
144
+
145
+ // [.., '0', _, _] => Color.Blue, // Input3の入力があれば。。。
146
+
147
+ // _ => Color.White, // default
148
+ //};
149
+
150
+ //// ifを並べたほうがわかりやすい場合も?
151
+ ////if (binaryStr is [.., '0', _, '0']) row2.Cells[3].Style.BackColor = Color.Red;
152
+ ////if (binaryStr is ['1', .., '0', _, '0']) row2.Cells[3].Style.BackColor = Color.Green;
87
153
  }
88
154
 
89
155
  [Flags]
@@ -100,14 +166,16 @@
100
166
  Input6 = 32,
101
167
  Input7 = 64,
102
168
  Input8 = 128,
169
+
170
+ Input1_and_3 = Input1 | Input3, // 複数条件に意味のある名前を付けたければ
103
171
  }
104
172
 
105
173
  private class Top16 // 雑いw
106
174
  {
107
175
  private static Random random = new Random();
108
- internal static int GetInputs(object handle) => random.Next(256);
176
+ public static int GetInputs(object handle) => random.Next(256);
109
177
  }
110
178
  }
111
179
  }
112
180
  ```
113
- ![アプリ動画](https://ddjkaamml8q8x.cloudfront.net/questions/2023-11-02/5708087d-4dc9-4204-8ffb-43717ceff630.gif)
181
+ ![アプリ動画](https://ddjkaamml8q8x.cloudfront.net/questions/2023-12-15/73ca81f8-46fb-419e-a6ba-81c65ee520de.gif)