- ベストアンサー
ツールバーのボタンの動きがおかしい
- VB6(SP5)で作成したプログラムにおいて、ツールバーのボタンの動作が正常に機能しない問題に困っています。ボタンを押すと他のボタンの状態も自動的に変わるはずですが、起動直後にメニューで操作するとボタンが正常にトグルせず、ずっと押された状態になってしまいます。ツールバーのリフレッシュやtbrUnPressedの設定など、さまざまな対策を試しましたが効果がありません。他に解決策やこの現象に関する情報があれば教えていただきたいです。
- VB6(SP5)で作成したプログラムにおいて、ツールバーのボタンの動作に関する問題が発生しています。ボタンを押すと他のボタンの状態が変わるはずですが、起動直後にメニューで操作するとボタンの状態が正常にトグルされず、ずっと押されている状態のままです。ツールバーのリフレッシュやtbrUnPressedの設定など、さまざまな対策を試しましたが効果がありませんでした。この問題に対する解決策や情報はありますか?お知恵をお貸しください。
- VB6(SP5)で開発したプログラムで、ツールバーのボタンの動作に問題が発生しています。ボタンを押すと他のボタンの状態が変わるべきですが、起動直後にメニューで操作するとボタンの状態が正しくトグルされず、押された状態のままになってしまいます。さまざまな対策を試しましたが、問題は解決しませんでした。この問題に関する情報や解決策をお持ちの方がいれば、ご教示いただけますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみません。#1 では何にもならないですね。デバックのとき出来たと思って勘違いしてしまいました。 Load イベントを次に変えればOKかと思います。根本的な要因についてはわかりません。 Private Sub Form_Activate() DoEvents mnuTest_Click GetPrivateProfileInt("Settings", "test", 1, App.Path & "\test.ini") End Sub
その他の回答 (1)
- baka
- ベストアンサー率83% (15/18)
原因についてはコードを見てみないとよくわかりません。が、似たような現象は何度も経験した覚えがあります。その詳細は忘れましたが。。。 試しに前回のボタンの状態を復元するサンプルを作ってみました。はずしていたらレスしてください。 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では未確認)。
お礼
2度も回答ありがとうございます。 今度はうまくいきました。 これで何とかなりそうです。助かりました。 ありがとうございました。