

VB6(SP5)でプログラムを作っていますが、ツールバーのボタンの動作がおかしくて困っています。
ツールバーにボタンを3つ作り(Aボタン、Bボタン、Cボタンとします)、スタイルをtbrButtonGroupにしました。当然、どれかひとつのボタンを押すと、他の二つは自動的にUnPressed状態に変わります。
起動直後、どのボタンがPressed状態になっているかは、INIファイルの設定にしたがいます。
この、ボタンを押しての機能切り替えをメニューからもできるようにしています。
つまり、メニューでAを選択すると、Aボタンを押したのと同じ状態になり、AがPressed、B、CボタンがUnPressed状態になります。
ところが、メニューで操作すると、起動時にPressed状態になっているボタンがずっとUnpressed状態のままになってしまいます。一度ツールバーでボタンを操作すると、その後はメニューで操作してもボタンは正常にトグルするのですが、メニューだけで操作していると、ずっとPressed状態のままです(ボタン表面の色だけ、PressedとUnpressedで変わります)。
現時点で以下の対策を試してみましたが、まったく効果ありませんでした。
・ツールバーのリフレッシュ。
・押されない他の二つのボタンに対してtbrUnPressedを設定する(本来tbrButtonGroupにしてあればいらないはず)。その後ツールバーをリフレッシュしてもダメ。
・メニューを選択した場合でも、一度Toolbar_ButtonClick()へ飛んでからボタンの処理に飛ぶようにする。
上記以外に、何か手段はありますでしょうか?
また、ツールバーコントロール自体のバグなんじゃないかとも思っているのですが、何かこの現象について情報がありましたら、お教えください。
No.2ベストアンサー
- 回答日時:
すみません。
#1 では何にもならないですね。デバックのとき出来たと思って勘違いしてしまいました。Load イベントを次に変えればOKかと思います。根本的な要因についてはわかりません。
Private Sub Form_Activate()
DoEvents
mnuTest_Click GetPrivateProfileInt("Settings", "test", 1, App.Path & "\test.ini")
End Sub
No.1
- 回答日時:
原因についてはコードを見てみないとよくわかりません。
が、似たような現象は何度も経験した覚えがあります。その詳細は忘れましたが。。。試しに前回のボタンの状態を復元するサンプルを作ってみました。はずしていたらレスしてください。
1.ツールバーコントロールに tbrButtonGroup スタイルのボタンを3つ配置します。
2.メニューエディタで適当な親メニューを作成し、その下層として 'mnuTest' という同じ名前のメニューを3つ作成します。3つのメニューには1から3のインデックスを付けておきます。キャプションは 'A'、'B'、'C' とでもしておきます。
3.プロジェクトを適当な場所に保存してから実行します。
Option Explicit
Private Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Sub Form_Load()
mnuTest_Click GetPrivateProfileInt("Settings", "test", 1, App.Path & "\test.ini")
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim i As Long
For i = mnuTest.LBound To mnuTest.UBound
If mnuTest(i).Checked Then Exit For
Next
WritePrivateProfileString "Settings", "test", CStr(i), App.Path & "\test.ini"
End Sub
Private Sub mnuTest_Click(Index As Integer)
If Not Toolbar1.Buttons(Index).Value = tbrPressed Then
test Index
Toolbar1.Buttons(Index).Value = tbrPressed
End If
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
test Button.Index
End Sub
Private Sub test(Index As Integer)
Dim i As Long
For i = mnuTest.LBound To mnuTest.UBound
mnuTest(i).Checked = i = Index
Next
'ボタンの変更による処理が必要であればこれ以降に記述します
End Sub
回答ありがとうございます。
多少やり方は異なりますが、私が書いたソースも回答していただいたソースと同じように、INIファイルに終了時のボタン状態を保存し、次回起動時にそのボタンが押された状態になるようにしています。
質問文がわかりにくかったかもしれませんが、このボタン状態の復元には問題ありません。
その後メニューだけで操作すると、起動時に押された状態のボタンがずっと押された状態のままで変化しないのです。
回答していただいたソースをコピー&ペーストして実行してみましたが、やはりメニューから操作すると、起動時に押されていたボタンがずっと押された状態のままでした。
なお、質問では書き忘れていましたが、WindowsのOSは2000とNT4.0です(それ以外のOSでは未確認)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBAでオプションボタンによって...
-
VBA IE ダウンロード ダイアロ...
-
VB.net でトグルボタンを実現し...
-
VBA(エクセル)で自動的にボタン...
-
Access VBA でデータペーストを...
-
C#でSendInputを使ったサンプル...
-
PythonでChrome操作について
-
C#で動的に作ったtextboxを消す。
-
アイコンとボタンの違い
-
閉じると「+」になり開くと「-...
-
VB.NET テキストボックスの入力...
-
C#プログラムで、ボタンをショ...
-
ボタンをマウスで押し続けたと...
-
VBAで多数のプログラムを一つの...
-
VB6でマルチスレッド?
-
フォームの再読み込み
-
マルチページで現在開いている...
-
VB6コントロール配列をパラメー...
-
ボタンコントロールの改行(Win...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
VBAで多数のプログラムを一つの...
-
Excel VBA Application.caller...
-
VBA CommandButtonの文字ずれ
-
コマンドボタンやイメージにマ...
-
C#プログラムで、ボタンをショ...
-
BorlandC++Builderでのタイマー...
-
[VB.net] ボタン(Flat)のEnable...
-
フォームの再読み込み
-
ボタンをマウスで押し続けたと...
-
閉じると「+」になり開くと「-...
-
Access VBA でデータペーストを...
-
C#でSendInputを使ったサンプル...
-
バックスペース機能の作り方
-
アイコンとボタンの違い
-
セルをマクロのボタンにしたい。
-
Excel マクロ 閉じるボタン
-
VBAのボタンの位置が変わって困...
おすすめ情報