Visual Basic 6.0でプログラムしています。
MSFlexGridのタイトルセルをクリックした際に、1度選択すると昇順に
2度目が降順にとなり、以後は交互にソートするようにしたいのですが、
うまくいきません。
解決方法を教えていただけないでしょうか?
現在のコードは
Private Sub MSFlexGrid_Click()
With MSFlexGrid
.Row = .MouseRow
If .Sort = flexSortGenericAscending Then
.Sort = flexSortGenericDescending
Else
.Sort = flexSortGenericAscending
End If
End With
End Sub
となっています。
お手数をおかけしますが、よろしくお願いいたします。
↓な感じでは駄目ですか?
Private Sub MSHFlexGrid1_Click()
With MSHFlexGrid1
If .Col = 0 And .Row = 1 And .MouseRow = 0 Then
If .TextMatrix(0, 0) = "項目名 ▲" Then
.TextMatrix(0, 0) = "項目名 ▼"
.Sort = flexSortGenericAscending
Else
.TextMatrix(0, 0) = "項目名 ▲"
.Sort = flexSortGenericDescending
End If
End If
'以下同様に必要な列だけ追加
End With
End Sub
回答ありがとうございます。
なるほど、確かにこの方法でも出来ますね。
ですが項目数がそれなりに多いので、全部の項目でやると
プログラム量がかなり多くなってしまいますね・・・。
とりあえずはこの方法でやってみます。
やじゅ様のおっしゃった方法ですが、ちょっとした不都合があって
完全には出来ませんでした。
この方法でやると、新たに別の項目を選択すると必ずしも昇順のソート
にならず降順で行われてしまうこともあります。
出来れば、このときは必ず昇順でソートしたいのですがどのようにすれば
よいのでしょうか。
考えたのは選択した項目でソートした時、その項目以外の項目名を
すべて"項目名 ▲"に変更するということですが、項目数が多くて
このコードを書くと莫大な量のプログラムを書くことになってしまいます。
他にやり方はあるのでしょうか?
別に変数を用意しておけば良いのでは?
Private SortFlg(Colの数) As Integer
With MSHFlexGrid1
If .MouseRow = 0 Then
If SortFlg(.Col) = flexSortGenericAscending Then
Erase SortFlg
SortFlg(.Col) =flexSortGenericDescending
Else
Erase SortFlg
SortFlg(.Col) =flexSortGenericAscending
End If
.Sort = flexSortGenericDescending
Endif
End With
▲つけるとかはお好きに
環境無いので、エラーあったらごめん。
ここ間違ってた。
With MSHFlexGrid1
If .MouseRow = 0 Then
If SortFlg(.Col) = flexSortGenericAscending or SortFlg(.Col) = 0 Then
どんどん間違い出てきそうです。
すまん。
orz
.Sort = SortFlg(.Col)
#今日はそっとしておいてください。
ものりす様、回答ありがとうございます。
上記のコードで試してみたところ、少し不具合が存在してうまく
いきませんでしたが、いろいろと試しながら修正してみたところ
どうにかうまく作動するようになりました。
回答していただいた、やじゅ様、ものりす様ありがとうございました。
解決済みにするの忘れてました(^_^;A)
ツイート | ![]() |