質問編集履歴

5

最後に修正

2018/01/26 05:29

投稿

suimi
suimi

スコア8

test CHANGED
File without changes
test CHANGED
@@ -10,6 +10,10 @@
10
10
 
11
11
  Zuishinさん,ayuma0913さん.ありがとうございます.
12
12
 
13
+ 次が途中経過です.この文では動きませんでした.
14
+
15
+ if(name.IndexOf("TextBlock")<9)の時点でTrueに入れてませんでした.
16
+
13
17
 
14
18
 
15
19
  ```C#

4

ニュアンスの変更

2018/01/26 05:29

投稿

suimi
suimi

スコア8

test CHANGED
File without changes
test CHANGED
@@ -278,4 +278,4 @@
278
278
 
279
279
  ```
280
280
 
281
- 90%以上パクリではありますができました
281
+ 90%以上パクリではありますができました

3

状況の進展に伴い,目的が完遂され,この記事を後に見る人に向けた内容に変更

2018/01/26 05:19

投稿

suimi
suimi

スコア8

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,127 @@
12
12
 
13
13
 
14
14
 
15
- ``````c#
15
+ ```C#
16
+
17
+ private bool FilterByName(string name, int min, int max)
18
+
19
+ {
20
+
21
+ // name が TextBlock1, TextBlock2... のような "TextBlock" + 数値でないときは false を返します。
22
+
23
+ // それ以外の場合、数値が min 以上 max 以下であれば true を、そうでなければ false を返します。
24
+
25
+ int change;
26
+
27
+
28
+
29
+ if(name.IndexOf("TextBlock")<9)
30
+
31
+ {
32
+
33
+ return false;
34
+
35
+ }
36
+
37
+ else
38
+
39
+ {
40
+
41
+ Regex num = new Regex(@"[^0-9]");
42
+
43
+ string a = num.ToString();
44
+
45
+ change = int.Parse(a);
46
+
47
+
48
+
49
+ TextBlock01.Text = change.ToString();
50
+
51
+
52
+
53
+ if (change > min && change < max)
54
+
55
+ {
56
+
57
+ return true;
58
+
59
+ }
60
+
61
+ else
62
+
63
+ {
64
+
65
+ return false;
66
+
67
+ }
68
+
69
+ }
70
+
71
+
72
+
73
+ }
74
+
75
+ ```
76
+
77
+
78
+
79
+ ayuma0913さんのような感じでMatchでもできました.
80
+
81
+ 今後のためにMatchを知らない前提で目的に合わせて調べて試してを繰り返してできたものを残します.
82
+
83
+ ありがとうございました.
84
+
85
+
86
+
87
+ ```XAML
88
+
89
+ <Window x:Class="WpfApp1.MainWindow"
90
+
91
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
92
+
93
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
94
+
95
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
96
+
97
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
98
+
99
+ xmlns:local="clr-namespace:WpfApp1"
100
+
101
+ mc:Ignorable="d"
102
+
103
+ Title="MainWindow" Height="350" Width="525">
104
+
105
+ <Grid Margin="20">
106
+
107
+ <Grid.RowDefinitions>
108
+
109
+ <RowDefinition Height="Auto"/>
110
+
111
+ <RowDefinition Height="Auto"/>
112
+
113
+ <RowDefinition Height="Auto"/>
114
+
115
+ <RowDefinition/>
116
+
117
+ <RowDefinition Height="Auto"/>
118
+
119
+ </Grid.RowDefinitions>
120
+
121
+ <TextBlock Grid.Row="0" Name="TextBlock01"/>
122
+
123
+ <TextBlock Grid.Row="1" Name="TextBlock02"/>
124
+
125
+ <TextBlock Grid.Row="2" Name="TextBlock03"/>
126
+
127
+ <Button Grid.Row="4" Width="90" Height="21" Click="Button_Click">Click me!</Button>
128
+
129
+ </Grid>
130
+
131
+ </Window>
132
+
133
+ ```
134
+
135
+ ```C#
16
136
 
17
137
  using System.Collections.Generic;
18
138
 
@@ -30,6 +150,10 @@
30
150
 
31
151
  {
32
152
 
153
+ // MainWindow 中には複数の TextBlock が含まれます。
154
+
155
+ // TextBlock はそれぞれ TextBlock1, TextBlock2... のように名付けられています。
156
+
33
157
  public partial class MainWindow : Window
34
158
 
35
159
  {
@@ -38,6 +162,8 @@
38
162
 
39
163
 
40
164
 
165
+ // parent の子孫要素から全ての TextBlock を抽出して返すメソッド
166
+
41
167
  private IEnumerable<TextBlock> FindTextBlocks(DependencyObject parent)
42
168
 
43
169
  {
@@ -58,24 +184,6 @@
58
184
 
59
185
 
60
186
 
61
- private bool FilterByName(string name)
62
-
63
- {
64
-
65
- // name の数値部分が 50~80 なら true を、それ以外なら false を返す
66
-
67
- name = "8";
68
-
69
-
70
-
71
- return name;
72
-
73
- //エラー発生。stringをboolに暗黙的に変換できません。nameで数値の範囲の制限のかけ方がわかりませんでした。
74
-
75
- }
76
-
77
-
78
-
79
187
  public MainWindow()
80
188
 
81
189
  {
@@ -84,11 +192,7 @@
84
192
 
85
193
  textBlocks = FindTextBlocks(this)
86
194
 
87
- .Where(a => Match(a.Name))
195
+ .Where(a => FilterByName(a.Name, 1, 2))
88
-
89
- //ここの使い方が調べましたが分からなかったです。なんとなくの意味しか理解していません。
90
-
91
- .OrderBy(a => a.Name)
92
196
 
93
197
  .ToList();
94
198
 
@@ -96,6 +200,64 @@
96
200
 
97
201
 
98
202
 
203
+ private bool FilterByName(string name, int min, int max)
204
+
205
+ {
206
+
207
+ // name が TextBlock1, TextBlock2... のような "TextBlock" + 数値でないときは false を返します。
208
+
209
+ // それ以外の場合、数値が min 以上 max 以下であれば true を、そうでなければ false を返します。
210
+
211
+ int change;
212
+
213
+ string s1 = name.Substring(0, 9);
214
+
215
+
216
+
217
+ string s2 = Regex.Replace(name, @"[^\d]", "");
218
+
219
+
220
+
221
+ if (s1!="TextBlock")
222
+
223
+ {
224
+
225
+ return false;
226
+
227
+ }
228
+
229
+ else
230
+
231
+ {
232
+
233
+ change = int.Parse(s2);
234
+
235
+
236
+
237
+
238
+
239
+ if (change >= min && change <= max)
240
+
241
+ {
242
+
243
+ return true;
244
+
245
+ }
246
+
247
+ else
248
+
249
+ {
250
+
251
+ return false;
252
+
253
+ }
254
+
255
+ }
256
+
257
+
258
+
259
+ }
260
+
99
261
  private void Button_Click(object sender, RoutedEventArgs e)
100
262
 
101
263
  {
@@ -110,78 +272,10 @@
110
272
 
111
273
  }
112
274
 
113
-
114
-
115
275
  }
116
276
 
117
277
  }
118
278
 
119
279
  ```
120
280
 
121
- 現在FilterByNameの中身を考えて変更してみましたが,このままだとNamwの数値が存在する数値でも感知できていないみたいなので前回でおっしゃっていたMatchを使う方針でやってます.
122
-
123
- ```C#
124
-
125
- private bool FilterByName(string name, int min, int max)
126
-
127
- {
128
-
129
- // name が TextBlock1, TextBlock2... のような "TextBlock" + 数値でないときは false を返します。
130
-
131
- // それ以外の場合、数値が min 以上 max 以下であれば true を、そうでなければ false を返します。
132
-
133
- int change;
134
-
135
-
136
-
137
- if(name.IndexOf("TextBlock")<9)
138
-
139
- {
140
-
141
- return false;
142
-
143
- }
144
-
145
- else
146
-
147
- {
148
-
149
- Regex num = new Regex(@"[^0-9]");
150
-
151
- string a = num.ToString();
152
-
153
- change = int.Parse(a);
281
+ 90%以上パクリではありますができました.
154
-
155
-
156
-
157
- TextBlock01.Text = change.ToString();
158
-
159
-
160
-
161
- if (change > min && change < max)
162
-
163
- {
164
-
165
- return true;
166
-
167
- }
168
-
169
- else
170
-
171
- {
172
-
173
- return false;
174
-
175
- }
176
-
177
- }
178
-
179
-
180
-
181
- }
182
-
183
- ```
184
-
185
- よろしくお願いします。
186
-
187
- ```

2

状況の進展により追加

2018/01/26 05:17

投稿

suimi
suimi

スコア8

test CHANGED
File without changes
test CHANGED
@@ -118,6 +118,70 @@
118
118
 
119
119
  ```
120
120
 
121
+ 現在FilterByNameの中身を考えて変更してみましたが,このままだとNamwの数値が存在する数値でも感知できていないみたいなので前回でおっしゃっていたMatchを使う方針でやってます.
122
+
123
+ ```C#
124
+
125
+ private bool FilterByName(string name, int min, int max)
126
+
127
+ {
128
+
129
+ // name が TextBlock1, TextBlock2... のような "TextBlock" + 数値でないときは false を返します。
130
+
131
+ // それ以外の場合、数値が min 以上 max 以下であれば true を、そうでなければ false を返します。
132
+
133
+ int change;
134
+
135
+
136
+
137
+ if(name.IndexOf("TextBlock")<9)
138
+
139
+ {
140
+
141
+ return false;
142
+
143
+ }
144
+
145
+ else
146
+
147
+ {
148
+
149
+ Regex num = new Regex(@"[^0-9]");
150
+
151
+ string a = num.ToString();
152
+
153
+ change = int.Parse(a);
154
+
155
+
156
+
157
+ TextBlock01.Text = change.ToString();
158
+
159
+
160
+
161
+ if (change > min && change < max)
162
+
163
+ {
164
+
165
+ return true;
166
+
167
+ }
168
+
169
+ else
170
+
171
+ {
172
+
173
+ return false;
174
+
175
+ }
176
+
177
+ }
178
+
179
+
180
+
181
+ }
182
+
183
+ ```
184
+
121
185
  よろしくお願いします。
122
186
 
123
187
  ```

1

質問部分の修正および現状と予定の明記

2018/01/25 22:48

投稿

suimi
suimi

スコア8

test CHANGED
@@ -1 +1 @@
1
- C# WPF でtextblockの配列処理がうまくできませんでした。
1
+ C# WPF でtextblockの配列処理を行い
test CHANGED
@@ -1,4 +1,14 @@
1
1
  一度回答をいただいたものの、うまく数値の範囲制限のかけ方が分からなかったので再質問しています。
2
+
3
+ C#のWPFアプリケーションでTextBlockをC言語の変数および配列のように扱って反復処理に制限を設けたり,番号を他の変数で指定したいと考えています.
4
+
5
+ 現在は勉強中なので,解決した場合,質問上に載せているプログラム変更とBAの決定を行いたいと思います.
6
+
7
+ プログラムの修正に目が行き過ぎて,質問文の修正を読んですぐ忘れてました.
8
+
9
+ 修正が遅くなりましてごめんなさい.
10
+
11
+ Zuishinさん,ayuma0913さん.ありがとうございます.
2
12
 
3
13
 
4
14