チェックボックス付きのリストボックスについて(その2)

解決


あこ  2004-11-03 22:13:49  No: 117352

こんにちは。お世話になります。。
環境はVB6.0です。

チェックボックス付きのリストボックスについて質問があります。

リストボックスが選択されるときにチェックボックスにチェックマークが
付いても付かなくてもSelectedでチェックすると
選択されていることになっているのですが・・

選択されている項目に対して チェックマークが付いていない時に
後からチェックマークをつけることができるプロパティなどが
ありましたら 教えていただきたいと思っております。

よろしくお願いいたしますm(_ _)m


ガッ  2004-11-04 11:39:57  No: 117353

>チェックボックス付きのリストボックスについて質問があります。
>
>リストボックスが選択されるときにチェックボックスにチェックマークが
>付いても付かなくてもSelectedでチェックすると
>選択されていることになっているのですが・・
ウチじゃぁ、そうならなかった。

>選択されている項目に対して チェックマークが付いていない時に
>後からチェックマークをつけることができるプロパティなどが
>ありましたら 教えていただきたいと思っております。
>
>よろしくお願いいたしますm(_ _)m

まぁ、再現可能なコードがかけなかったので、オレのコードを載せておく。

VERSION 5.00
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   2910
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   2415
   LinkTopic       =   "Form1"
   ScaleHeight     =   2910
   ScaleWidth      =   2415
   StartUpPosition =   3  'Windows の既定値
   Begin VB.CommandButton Command1 
      Caption         =   "チェック"
      Height          =   375
      Left            =   0
      TabIndex        =   1
      Top             =   2160
      UseMaskColor    =   -1  'True
      Width           =   2175
   End
   Begin VB.ListBox List1 
      Height          =   2160
      Left            =   0
      Style           =   1  'チェックボックス
      TabIndex        =   0
      Top             =   0
      Width           =   2175
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Sub Command1_Click()
    Debug.Print "選択されている項目のSelectedプロパティ"; List1.Selected(List1.ListIndex)
    If List1.ListIndex > -1 Then List1.Selected(List1.ListIndex) = True
End Sub

Private Sub Form_Load()
Dim i As Long
For i = 1 To 10
    List1.AddItem i
Next
End Sub


ガッ  2004-11-04 11:41:08  No: 117354

ぅゎ、If文の意味がねぇじゃん(。・(ノ∀`)・。


あこ  2004-11-05 00:17:27  No: 117355

お返事ありがとうございました。
チェックボックスについて 上記のやりかたは問題なく大丈夫でした(^-^)

説明不足でしたが・・
リストボックスのチェックボックスをマウスダウンした時に
メッセージを表示して その項目の処理を行おうと思ったのですが・・
項目は反転されて選択できるのですが チェックボックスにレ点が付かないので
選択されているとわかっていてもレ点は追加できるでしょうか?

選択時の項目反転とレ点は連動していないのでしょうか?
それとも しないものなのでしょうか??
発生させるタイミングが悪いのでしょうか・・・。。
ご存知であれば よろしくお願いいたします。

環境はvb6.0 WindowsNTです。。


+id_rsa  2004-11-05 11:21:10  No: 117356

vb6+win2000だと
List1.Selected(Index) = Trueでレ点が付くけど???
NTだとだめなの??


魔界の仮面弁士  2004-11-05 17:00:41  No: 117357

もしかして、ItemCheckイベント中で MsgBox を表示されているのでしょうか?
で、選択項目自体は(Item引数などから)取得できるけれども、
MsgBoxを閉じるまで、レ点が付かないので悩んでいるとか。

もしそうなら、MsgBoxのタイミングをずらす事で回避できるかもしれません。

Private Sub List1_ItemCheck(Item As Integer)
    List1.Tag = CStr(Item)
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    Timer1.Enabled = False
    MsgBox List1.Tag
End Sub


あこ  2004-11-06 01:31:53  No: 117358

魔界の仮面弁士 さま みなさまありがとうございます(_ _)
魔界の仮面弁士 さま のいう通りの悩みなのです!!

デバックで一行ずつ実行していくとレ点がでるときもあったので
魔界の仮面弁士 さま のTimerを使用して試してみましたが・・

そのまま実行すると やはり項目選択しただけではつきませんでした・・。

実際に動かして見たロジックを書いておきます・・ので問題点などありましたら
ご指摘よろしくお願いいたします。

・複数(4つ)のリストボックスを配列コントロールで設定しております。
Private Sub List1_ItemCheck(Index As Integer, Item As Integer)Private 
   Timer1.Enabled = True

   With List1(Index)
        If List1(Index).Selected(Item) Then  
      ' チェックボックスがオンのときは
            MsgBox .List(Item) & "のチェックボックスをオンにしました。"

            ’**チェックされた時の処理が入る予定です。***

        Else  
      ' チェックボックスがオフのときは
            MsgBox .List(Item) &  "のチェックボックスをオフにしました。"
        End If
    End With

End Sub

Private Sub Timer1_Timer()
    Timer1.Enabled = False
    MsgBox "タイマーです。。。"
End Sub


魔界の仮面弁士  2004-11-06 04:46:52  No: 117359

どうやら、ItemCheckイベントは、
  「チェックボックスがクリックされた後」
  「レ点が表示される前」
というタイミングで呼び出されるようです。

なので、MsgBoxのように、後続の処理を妨げるようなコードは書かないで下さい。

私の回答にある「MsgBoxのタイミングをずらす」という発言は、
『ItemCheckイベント内では、MsgBoxを使うべきではない』という意味です。

実際、先の私のコードでは、ItemCheckイベント内ではMsgBoxを使っておりませんが、
あこさんのコードでは、ItemCheck内(とTimer内)でMsgBoxが使われていますよね。

# なお、Timer1.Intervalの値は、小さな値(60とか)にしておいて下さい。


あこ  2004-11-06 06:23:21  No: 117360

魔界の仮面弁士さま みなさま 本当にありがとうございました。

ItemCheckイベントが
  「チェックボックスがクリックされた後」
  「レ点が表示される前」
というタイミングということがわかりましたこと 大変参考になりました。

ご指摘の通り、ItemCheckイベント内での、MsgBoxを使用しないことで回避できたみたいです(^o^;)

まだ、メッセージ後のリスト初期状態へ戻す処理などをしておりまして・・
イベントの遷移で大変苦労しておりますが、
ひとつ問題が解決したので大変やる気がでてきました!
本当にありがとうございました。


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

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






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