こんにちは。お世話になります。。
環境はVB6.0です。
チェックボックス付きのリストボックスについて質問があります。
リストボックスが選択されるときにチェックボックスにチェックマークが
付いても付かなくてもSelectedでチェックすると
選択されていることになっているのですが・・
選択されている項目に対して チェックマークが付いていない時に
後からチェックマークをつけることができるプロパティなどが
ありましたら 教えていただきたいと思っております。
よろしくお願いいたしますm(_ _)m
>チェックボックス付きのリストボックスについて質問があります。
>
>リストボックスが選択されるときにチェックボックスにチェックマークが
>付いても付かなくても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
ぅゎ、If文の意味がねぇじゃん(。・(ノ∀`)・。
お返事ありがとうございました。
チェックボックスについて 上記のやりかたは問題なく大丈夫でした(^-^)
説明不足でしたが・・
リストボックスのチェックボックスをマウスダウンした時に
メッセージを表示して その項目の処理を行おうと思ったのですが・・
項目は反転されて選択できるのですが チェックボックスにレ点が付かないので
選択されているとわかっていてもレ点は追加できるでしょうか?
選択時の項目反転とレ点は連動していないのでしょうか?
それとも しないものなのでしょうか??
発生させるタイミングが悪いのでしょうか・・・。。
ご存知であれば よろしくお願いいたします。
環境はvb6.0 WindowsNTです。。
vb6+win2000だと
List1.Selected(Index) = Trueでレ点が付くけど???
NTだとだめなの??
もしかして、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
魔界の仮面弁士 さま みなさまありがとうございます(_ _)
魔界の仮面弁士 さま のいう通りの悩みなのです!!
デバックで一行ずつ実行していくとレ点がでるときもあったので
魔界の仮面弁士 さま の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
どうやら、ItemCheckイベントは、
「チェックボックスがクリックされた後」
「レ点が表示される前」
というタイミングで呼び出されるようです。
なので、MsgBoxのように、後続の処理を妨げるようなコードは書かないで下さい。
私の回答にある「MsgBoxのタイミングをずらす」という発言は、
『ItemCheckイベント内では、MsgBoxを使うべきではない』という意味です。
実際、先の私のコードでは、ItemCheckイベント内ではMsgBoxを使っておりませんが、
あこさんのコードでは、ItemCheck内(とTimer内)でMsgBoxが使われていますよね。
# なお、Timer1.Intervalの値は、小さな値(60とか)にしておいて下さい。
魔界の仮面弁士さま みなさま 本当にありがとうございました。
ItemCheckイベントが
「チェックボックスがクリックされた後」
「レ点が表示される前」
というタイミングということがわかりましたこと 大変参考になりました。
ご指摘の通り、ItemCheckイベント内での、MsgBoxを使用しないことで回避できたみたいです(^o^;)
まだ、メッセージ後のリスト初期状態へ戻す処理などをしておりまして・・
イベントの遷移で大変苦労しておりますが、
ひとつ問題が解決したので大変やる気がでてきました!
本当にありがとうございました。
ツイート | ![]() |