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

質問編集履歴

4

さらに改善した

2022/01/10 13:34

投稿

tada_tadaa
tada_tadaa

スコア114

title CHANGED
File without changes
body CHANGED
@@ -185,4 +185,10 @@
185
185
  追記3 1月10日22時06分
186
186
  YAmaGNZ様がe.Item.Selectedの事を教えてくださり試してみた所うまく動作しました。
187
187
  **If (e.Item.Selected And ListViewItemStates.Selected) <> 0 Then**
188
- ありがとうございました。
188
+ ありがとうございました。
189
+
190
+ ---
191
+ 追記4 1月10日22時29分
192
+ YAmaGNZ様のご指摘があり正しいのは
193
+ **If e.Item.Selected Then**
194
+ だとの事です。それと「選択されている」と判断するのであればFocusedやItemIndexではなく、Selectedを使用すべきとの事です。

3

さらに改善出来た

2022/01/10 13:34

投稿

tada_tadaa
tada_tadaa

スコア114

title CHANGED
File without changes
body CHANGED
@@ -179,4 +179,10 @@
179
179
  **If (e.State And ListViewItemStates.Focused) <> 0 Then**
180
180
  あるいは
181
181
  **If e.ItemIndex = index Then**
182
- にすることでうまい具合に動作するようになりました。
182
+ にすることでうまい具合に動作するようになりました。
183
+
184
+ ---
185
+ 追記3 1月10日22時06分
186
+ YAmaGNZ様がe.Item.Selectedの事を教えてくださり試してみた所うまく動作しました。
187
+ **If (e.Item.Selected And ListViewItemStates.Selected) <> 0 Then**
188
+ ありがとうございました。

2

改善した方法

2022/01/10 13:08

投稿

tada_tadaa
tada_tadaa

スコア114

title CHANGED
File without changes
body CHANGED
@@ -168,4 +168,15 @@
168
168
  End Sub
169
169
  ```
170
170
 
171
- 再質問で申し訳ないのですがよろしくお願いいたします。
171
+ 再質問で申し訳ないのですがよろしくお願いいたします。
172
+
173
+ ---
174
+ 追記2 1月10日21時43分
175
+ **Debug.WriteLine(e.State)**
176
+ で`e.State`の状態を調べた所、全部の項目が選択状態になっていました。なので全部赤色になってたわけです。なぜ`selected`になっているのかは分かりません。`selected`の代わりに`focus`で試してみた所`focus`は一つの項目だけ設定されてたので一つの項目だけが赤色になるようにできました。
177
+ **If (e.State And ListViewItemStates.Selected) <> 0 Then**
178
+
179
+ **If (e.State And ListViewItemStates.Focused) <> 0 Then**
180
+ あるいは
181
+ **If e.ItemIndex = index Then**
182
+ にすることでうまい具合に動作するようになりました。

1

再質問の為

2022/01/10 12:56

投稿

tada_tadaa
tada_tadaa

スコア114

title CHANGED
File without changes
body CHANGED
@@ -117,4 +117,55 @@
117
117
 
118
118
  ListView1_DrawItemが呼び出されたときに、それがスクロール処理や一番最初のサムネイル作成以外で呼び出された事が分かれば処理を抜けるようにすれば上書きを防ぐことが出来るのではないかと思いますが、どういうイベントによって呼び出されたのかを知る方法が分かりません。
119
119
 
120
- ListViewの選択された項目を選択状態の時の薄い青色の状態か、項目の背景色を目立つ色に変えたいのですが、どのようにすればいいでしょうか。
120
+ ListViewの選択された項目を選択状態の時の薄い青色の状態か、項目の背景色を目立つ色に変えたいのですが、どのようにすればいいでしょうか。
121
+
122
+ ---
123
+ 追記 1月10日20時19分
124
+
125
+ YAmaGNZ様が教えてくれたコードを
126
+ Dim imagerect As New Rectangle(New Point(e.Bounds.X + ((e.Bounds.Width - width1) / 2), e.Bounds.Y), New Size(width1, height1))
127
+ の直前に挿入したのですが、全部の項目が赤色になってしまいました。
128
+ また、Button2やButton3を押しても色が変わりません。(なんとなく該当の項目がちらついているようには見えます)
129
+ 項目をマウスでクリックしても色が変わりません。予想では選択した項目だけ赤色でほかは無色になると思ってたのですが、そうはなっていないのでどこかがおかしいと思うのですがどこがおかしいのか分かりません。
130
+ プロパティの変更は
131
+ ListView1.MultiSelect = False
132
+ ぐらいしか変更してないと思います。コードの変更箇所だけ下に載せてみます
133
+ ```VB
134
+ Private Sub ListView1_DrawItem(sender As Object, e As DrawListViewItemEventArgs) Handles ListView1.DrawItem
135
+ e.DrawDefault = False
136
+ e.DrawBackground()
137
+
138
+ If thumbnail(e.ItemIndex) Is Nothing Then
139
+ Dim original As Image
140
+ Try
141
+ original = Bitmap.FromFile(jpgFiles(e.ItemIndex))
142
+ Catch
143
+ original = My.Resources.Resource1._error
144
+ End Try
145
+ thumbnail(e.ItemIndex) = createThumbnail(original, Width, Height)
146
+ End If
147
+
148
+ 'ここから追加-------------------------------------------------------
149
+ If (e.State And ListViewItemStates.Selected) <> 0 Then
150
+ '選択されているので選択色(例で赤とする)で塗りつぶす
151
+ e.Graphics.FillRectangle(Brushes.Red, e.Bounds)
152
+ Else
153
+ '選択されていないので通常色で塗りつぶす
154
+ Using b = New SolidBrush(e.Item.BackColor)
155
+ e.Graphics.FillRectangle(b, e.Bounds)
156
+ End Using
157
+ End If
158
+ 'ここまで------------------------------------------------------------
159
+
160
+ Dim imagerect As New Rectangle(New Point(e.Bounds.X + ((e.Bounds.Width - width1) / 2), e.Bounds.Y), New Size(width1, height1))
161
+ e.Graphics.DrawImage(thumbnail(e.ItemIndex), imagerect)
162
+ 'e.Item.ForeColor = Color.AliceBlue ' ←コメント状態を解除するとListView1が高速で点滅状態になる
163
+ 'ListView1.Items(index).BackColor = Color.Aqua ' ←コメント状態を解除するとListView1が高速で点滅状態になる
164
+
165
+ e.DrawFocusRectangle()
166
+ 'ListView1.Items(index).Focused = True '←コメントにしました
167
+ 'ListView1.Items(index).Selected = True '←コメントにしました ' ←選択状態の時の青い色にならない
168
+ End Sub
169
+ ```
170
+
171
+ 再質問で申し訳ないのですがよろしくお願いいたします。