リストボックスのチェックについて


正義の支社  2005-05-12 20:52:07  No: 89784

リストボックスでstyleをチェックボックス型にした場合に□を押すとチェックがつきますが、文字の部分は2回押さないと□にチェックがつかないです。
なんとか文字の部分も1回チェックしただけでつくようになりませんか?


K.J.K.  2005-05-12 22:01:56  No: 89785

Clickイベント中でSelectedプロパティを反転させるとか。
プロシージャへの再入を阻むことと、カーソルの位置によっては
無視すること、に気をつければ問題なく実装できるでしょう。


正義の支社  2005-05-12 22:14:42  No: 89786

MouseDownの時に
lst.Selected(listindex) = True 
のようにしてみたら、文字の部分を押してもチェックがついたり、はずせたりするようになったのですが、
□→■→□(□がチェックしてない状態、■がチェックしている状態)
の順に押すと、3番目のチェックが外れた状態から押しても反応が全くなくなりました。
一度他の部分を押してからだとチェックが入るのですが、同じ行を連続で押すときちんと動かないです。
対処法はありますか?


K.J.K.  2005-05-13 19:14:29  No: 89787

なぜ、Trueに固定決めうちなのでしょう?
それと適切に再入を阻んでいます?


正義の支社  2005-05-13 19:43:17  No: 89788

Falseもやってますよ。
押されてる状態ならFalseにして、押されていない状態ならTrueにしてます。


LESIA  2005-05-13 20:30:14  No: 89789

こんな感じでいいのでは?

Option Explicit

Private OldIndex As Integer

Private Sub Form_Load()
    List1.Clear
    
    List1.AddItem "123"
    List1.AddItem "456"
    List1.AddItem "789"
    
    List1.ListIndex = 0
    OldIndex = 0
End Sub

Private Sub List1_Click()
    If List1.ListIndex = OldIndex Then Exit Sub
    
    List1.Selected(List1.ListIndex) = Not List1.Selected(List1.ListIndex)
End Sub

Private Sub List1_ItemCheck(Item As Integer)
    OldIndex = Item
End Sub


LESIA  2005-05-14 19:23:35  No: 89790

ちょっと補足。
リストボックスで選択されている行(青くなっている行)は
文字の部分をクリックしても□にチェックがつきますが
選択されている行じゃない行は、文字の部分をクリックすると
選択されるだけです。
この状態でもう一回クリックすると、上の、選択されている行の
文字をクリックするのと同じ動作なので、□にチェックがつきます

というわけで、選択されている行とは違う行をクリックした時だけ
チェックの値を反転させれば良いです。


  2005-05-18 00:25:07  No: 89791

その処理を追加した場合、lst.selected(i)=trueみたいな感じにするとClickイベントにいきませんか?


LESIA  2005-05-18 17:59:06  No: 89792

□をチェックしたときも、ItemCheckイベントの後にClickイベントが発生するので、大丈夫だと思います。
ただ、前に選択していた行とSelectedをTrueにした行の両方が青くなってしまう
みたいですが、List1.Refreshとすれば、SelectedをTrueにした行だけが青く
なります。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加