コンボボックスについて

解決


アポロ  2004-07-27 09:59:30  No: 115075  IP: [192.*.*.*]

さっそく質問させていただきたく思います。
環境: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をいきなり押しても削除するには
どうしたらよいでしょうか?

編集 削除
特攻隊長まるるう  2004-07-27 10:29:53  No: 115076  IP: [192.*.*.*]

原因は調べたの?
ListIndex をフォームのロード時に設定しておけば
いいだけじゃないの?

編集 削除
アポロ  2004-07-27 10:35:29  No: 115077  IP: [192.*.*.*]

最初はListIndexを設定していました。
ですが、削除や追加するとListIndexが変更になるので
エラーになってしまいます。

編集 削除
特攻隊長まるるう  2004-07-27 10:39:07  No: 115078  IP: [192.*.*.*]

>最初はListIndexを設定していました。
>ですが、削除や追加するとListIndexが変更になるので
>エラーになってしまいます。
それは当然のことです。
ListCount などを調べてエラーにならないように
設定すればいいんじゃないですか?

編集 削除
アポロ  2004-07-27 13:35:29  No: 115079  IP: [192.*.*.*]

申し訳ないですが
ヒントをいただけないでしょうか?

編集 削除
特攻隊長まるるう  2004-07-27 14:36:42  No: 115080  IP: [192.*.*.*]

エラーメッセージの内容もエラーの起こった状況も
書かずにヒントをくれと言われても困るんですが?(^^;)

とりあえずそこそこ動きそうなコードを載せますので自分で
気に入るように修正して下さい。
[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

編集 削除
アポロ  2004-07-28 11:06:04  No: 115081  IP: [192.*.*.*]

レスありがとうございます。
思っていた通りのことができるようになりました。

今後もっと勉強していきます。
本当にありがとうございました。

編集 削除