tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルコンボボックスのリストから1つを選択した場合の表示
記事No11733
投稿日: 2008/03/11(Tue) 09:52
投稿者tea
またお世話になります。
コンボボックスに以下のリストインデックスを作成して、その中から1つを
選択してDeffenceStyleAddTopicのbbDeffenceStyleTopicに持たせたいので
す。
bbDeffenceStyleTopic As bbTopicTypeが問題点なのはわかるんですが、
現状では標準モジュール内に17として宣言しているので、bbDeffenceStyleTopic
は17となります。

どうか教えてください。
よろしくお願いします。


Public Enum bbTopicType
    bb2PShotTTopic = 1
    bb2PShotTopic = 2
    bb3PShotTTopic = 3
    bb3PShotTopic = 4
    bbFreeThrowTTopic = 5
    bbFreeThrowTopic = 6
    bbOffReboundTopic = 7
    bbDefReboundTopic = 8
    bbAssistTopic = 9
    bbSteelTopic = 10
    bbTurnOvertopic = 11
    bbBlockshotTopic = 12
    bbFoulTopic = 13
    bbPlayInTopic = 14
    bbPlayOutTopic = 15
    bbTimeOutTopic = 16
    'ディフェンススタイルの選択
    bbDeffenceStyleTopic = 17
End Enum

FrmMainフォーム
Form_load
For i = 0 To 1
        With CmbDeffenceStyle(i)
            .Clear
            .AddItem "abc", 0
            .AddItem "def", 1
            .AddItem "ghi", 2
            .AddItem "jkl", 3
            .AddItem "mno", 4
            .AddItem "pqr", 5
            .ListIndex = 0
        End With
    Next

Teamクラス
Public Function DeffenceStyleAddTopic(ByVal PlayerUniformNumber As Long, _
                                ByVal bbDeffenceStyleTopic As bbTopicType, _
                                ByVal TopicParam1 As Variant, _
                                ByVal TopicParam2 As Variant)


    '---ココが問題点でディフェンスの種類を選択させる---
    DeffenceStyleAddTopic = bbDeffenceStyleTopic
        
    With mp
        '追加するトピックの各項目'
        .Parent.Journal.AddTopic .Parent.Quarter, .Parent.TimeOnQuarter, _
        .TeamIndex, .TeamChar, PlayerUniformNumber, _
                    DeffenceStyleAddTopic, TopicParam1, TopicParam2
    End With
End Function

[ツリー表示へ]
タイトル自己解決しました。
記事No11738
投稿日: 2008/03/11(Tue) 13:15
投稿者tea
以下のコードで自己解決しました。

Public Sub DeffenceStyle()
Dim i As Integer
Dim PlayerUniformNumber As Long
PlayerUniformNumber = -1

Dim TopicParam1(2 To 6) As Variant
Dim TopicParam2 As Variant

TopicParam1(2) = "abc"
TopicParam1(3) = "def"
TopicParam1(4) = "ghi"
TopicParam1(5) = "jkl"
TopicParam1(6) = "mno"

TopicParam2 = "pqr"
    
        If mp.DeffenceStyleChoice(1) = 0 Then
            Exit Sub
            
        ElseIf mp.DeffenceStyleChoice(1) = -1 Then
            
            For i = 0 To 1
                If frmMain.CmbDeffenceStyle(i).ListIndex = 2 Then
                    Call DeffenceStyleAddTopic(PlayerUniformNumber, _
            bbDeffenceStyleTopic, TopicParam1(2), TopicParam2)
            
                ElseIf frmMain.CmbDeffenceStyle(i).ListIndex = 3 Then
                    Call DeffenceStyleAddTopic(PlayerUniformNumber, _
            bbDeffenceStyleTopic, TopicParam1(3), TopicParam2)
            
                ElseIf frmMain.CmbDeffenceStyle(i).ListIndex = 4 Then
                    Call DeffenceStyleAddTopic(PlayerUniformNumber, _
            bbDeffenceStyleTopic, TopicParam1(4), TopicParam2)
            
                ElseIf frmMain.CmbDeffenceStyle(i).ListIndex = 5 Then
                    Call DeffenceStyleAddTopic(PlayerUniformNumber, _
            bbDeffenceStyleTopic, TopicParam1(5), TopicParam2)
            
                ElseIf frmMain.CmbDeffenceStyle(i).ListIndex = 6 Then
                    Call DeffenceStyleAddTopic(PlayerUniformNumber, _
            bbDeffenceStyleTopic, TopicParam1(6), TopicParam2)
            End If
            Next
        End If
End Sub

[ツリー表示へ]
タイトルRe: 自己解決しました。
記事No11740
投稿日: 2008/03/11(Tue) 13:59
投稿者
> TopicParam1(2) = "abc"
> TopicParam1(3) = "def"
> TopicParam1(4) = "ghi"
> TopicParam1(5) = "jkl"
> TopicParam1(6) = "mno"

コンボボックスで選択中の内容を取得するなら
.Text プロパティでもいけますよ。

[ツリー表示へ]
タイトルRe^2: 自己解決しました。
記事No11743
投稿日: 2008/03/12(Wed) 09:18
投稿者tea
琴さん、回答をいただき本当にありがとうございます。
解決したと思ったんですが・・・・間違っていたと言うことなんでしょうか?
.Textプロパティーはどこで使うんでしょう?
遅くなりましたが教えてください。
よろしくお願いします。

> コンボボックスで選択中の内容を取得するなら
> .Text プロパティでもいけますよ。

[ツリー表示へ]
タイトルRe^3: 自己解決しました。
記事No11746
投稿日: 2008/03/12(Wed) 10:48
投稿者るしぇ
>解決したと思ったんですが・・・・間違っていたと言うことなんでしょうか?
想定した入力と出力の組合せを全てテストして、想定どおりの結果が得られた
のなら、間違いという表現とは違うのでは?
。。。ただ、無駄が多いということです。

まず、For ループの中の If 判定ですが、ListIndex が違うだけで、しかも
その ListIndex がそのまま DeffenceStyleAddTopic の引数で利用されていて
他は全て同じでは?
。。。ということは
            For i = 0 To 1
                    Call DeffenceStyleAddTopic(PlayerUniformNumber, _
            bbDeffenceStyleTopic, TopicParam1(frmMain.CmbDeffenceStyle(i).ListIndex), TopicParam2)
            Next
だけで済むのでは?

更に、TopicParam1(frmMain.CmbDeffenceStyle(i).ListIndex)がコンボボックスで
選択されている文字列なのであれば、
            For i = 0 To 1
                    Call DeffenceStyleAddTopic(PlayerUniformNumber, _
            bbDeffenceStyleTopic, frmMain.CmbDeffenceStyle(i).Text, TopicParam2)
            Next
で終わってしまうのでは?TopicParam1 がそもそも必要無いと思います。

[ツリー表示へ]
タイトルRe^4: 自己解決しました。
記事No11747
投稿日: 2008/03/12(Wed) 11:14
投稿者
私が言いたかったことは全部るしぇさんが代弁してくださったので省略^^

気になったのは TopicParam1 とIf文判定が 2 から始まってるところですかね。
コンボボックスの ListIndex は 0 から始まるはず…。
CmbDeffenceStyle(i) の1番目(ListIndex=0 時)や2番目(ListIndex=1 時)を
選択した時にちゃんと狙いどおりの動作をしているか心配ですね。
"ghi"を選んだはずなのに内部的には"abc"を選んだことになってたりしませんかね?

今のコードで正しいなら
>             For i = 0 To 1
>                 If frmMain.CmbDeffenceStyle(i).ListIndex > 1 then
>                     Call DeffenceStyleAddTopic(PlayerUniformNumber, _
>             bbDeffenceStyleTopic, frmMain.CmbDeffenceStyle(i).Text, TopicParam2)
>                 End If
>             Next
となるでしょうね。

[ツリー表示へ]
タイトル確かに無駄が多かったです。
記事No11748
投稿日: 2008/03/12(Wed) 11:47
投稿者tea
るしぇさん、琴さん、回答をいただき本当にありがとうございます。
具体的なコードを教えていただいたおかげで、私が記述したコードに無駄が多い
ということが理解できました。

また、
ListIndex 0 は「Style」
ListIndex 1 は「-----」
として実行時のコンボボックスに表示される文字は「Style」となり、クリックす
ることで現れるリストの「---」から下のリストを選択するようにしています。
一応思ったとおりの動作はしています。

> 気になったのは TopicParam1 とIf文判定が 2 から始まってるところですかね。
> コンボボックスの ListIndex は 0 から始まるはず…。
> CmbDeffenceStyle(i) の1番目(ListIndex=0 時)や2番目(ListIndex=1 時)を
> 選択した時にちゃんと狙いどおりの動作をしているか心配ですね。

[ツリー表示へ]