さっそく質問させていただきたく思います。
環境:VB6.0 Windows2000
例えば
Form1にCombo1とCommand1があります。
Form2にCombo2とCommand2があります。
Command2を押すと項目が削除されるようになっています。
Form1のCombo1で項目を選んでCommand1を押すと
Form2が表示されて選んだ項目がCombo2に表示されるようになっています。
If Combo1.ListIndex > -1 Then
Combo1.RemoveItem Combo1.ListIndex
End If
以前教えて頂いたので項目の削除はできるようになっています。
ですが、Form2のCombo2を一度クリックしないと削除ができません。
Form2が表示されてCommand2をいきなり押しても削除するには
どうしたらよいでしょうか?
原因は調べたの?
ListIndex をフォームのロード時に設定しておけば
いいだけじゃないの?
最初はListIndexを設定していました。
ですが、削除や追加するとListIndexが変更になるので
エラーになってしまいます。
>最初はListIndexを設定していました。
>ですが、削除や追加するとListIndexが変更になるので
>エラーになってしまいます。
それは当然のことです。
ListCount などを調べてエラーにならないように
設定すればいいんじゃないですか?
申し訳ないですが
ヒントをいただけないでしょうか?
エラーメッセージの内容もエラーの起こった状況も
書かずにヒントをくれと言われても困るんですが?(^^;)
とりあえずそこそこ動きそうなコードを載せますので自分で
気に入るように修正して下さい。
[VB6.0]
'/////////// Form1 のコード
Option Explicit
Private Sub Form_Load()
Call ComboListItemSet(Me.Combo1)
Call ComboListItemSelect(Me.Combo1, 0)
Form2.Show
End Sub
Public Sub Combo1ListItemDelete(ByVal DeleteIndex As Integer)
Dim wSelectIndex
wSelectIndex = Me.Combo1.ListIndex
If wSelectIndex = DeleteIndex Then
wSelectIndex = wSelectIndex - 1
End If
Call ComboListItemDelete(Me.Combo1, DeleteIndex)
Call ComboListItemSelect(Me.Combo1, wSelectIndex)
End Sub
'/////////// Form2 のコード
Option Explicit
Private Sub Command2_Click()
Dim wDeleteIndex As Integer
With Me.Combo2
If .ListIndex > -1 Then
wDeleteIndex = .ListIndex
Call ComboListItemDelete(Me.Combo2, wDeleteIndex)
Call Form1.Combo1ListItemDelete(wDeleteIndex)
Call ComboListItemSelect(Me.Combo2, wDeleteIndex - 1)
End If
End With
End Sub
Private Sub Form_Load()
Call ComboListItemSet(Me.Combo2)
Call ComboListItemSelect(Me.Combo2, 0)
End Sub
'/////////// Module1 のコード
Option Explicit
Public Sub ComboListItemSet(ByVal Combox As ComboBox)
Dim i As Integer
With Combox
For i = 0 To 7
.AddItem ("項目" & CStr(i))
Next
End With
End Sub
Public Sub ComboListItemSelect(ByVal Combox As ComboBox, ByVal Index As Integer)
Dim i As Integer
With Combox
If .ListCount <= 0 Then
Exit Sub
ElseIf .ListCount < Index Then
.ListIndex = .ListCount - 1
Else
If Index = -1 Then
Index = 0
End If
.ListIndex = Index
End If
End With
End Sub
Public Sub ComboListItemDelete(ByVal Combox As ComboBox, ByVal Index As Integer)
Dim i As Integer
With Combox
If Index < 0 Then
Exit Sub
ElseIf .ListCount < Index Then
Exit Sub
Else
.RemoveItem Index
End If
End With
End Sub
レスありがとうございます。
思っていた通りのことができるようになりました。
今後もっと勉強していきます。
本当にありがとうございました。