Microsoft Forms 2.0 Object Library をコンポーネント設定で登録する。
標準EXE作成から、
Listbox と commandButton を貼り付け、
Form_Load を以下のように設定します。
Private Sub Form_Load()
'' リストマルチ選択、初期起動時のフォーカスはボタンに設定
ListBox1.MultiSelect = fmMultiSelectMulti
ListBox1.ListStyle = fmListStyleOption
'' CommandButton1.Caption = "ok"
'' CommandButton1.Default = True
'' リスト内を無駄アイテムで初期化(Step 1 って書き方古い??)
Dim i As Integer
For i = 1 To 100 Step 1
ListBox1.AddItem Right("00000" & i, 5)
Next i
End Sub
で、こいつを実行し、リストどれか選択、ボタンクリック、リスト選択
を何回か繰り返すうちに、リストの選択状態が変になります。
ボタンクリックの部分を、タブでフォーカスを外す、にしても同様です。
また、フォーカスしたまま、連続してリスト選択していても、たまに、
選択が解除されたり、1クリックで複数行選択されたり、やはり挙動不審
になります。
リストの見た目はこんな感じです。
□00001
□00002
■00003
■00004
...
□=選択されてない行のチェックボックス
■=選択されている行のチェックマークの付いたチェックボックス
当方のプロジェクトでは、このリストボックスの視覚効果がお客さんに
周知のようで、今更、チェックボックスの見た目を無し、にする訳には
いかないようです。作ってから4年もたとうという古いツールの機能追
加による、既存画面の見直し・機能拡張により、デバッグ中にこの変な
現象を見つけた奴がこいつの治す方法が分からずに嘆いています。4年
前にちゃんとまともなデバッグしてればこんなわけのわからんコントロ
ール使わないでもう少し手が込んだ?やり方にでも変更できたような気
がしますが、とりあえず修正手段が見つからず途方にくれている状態で
す。
VC++使って、ListBox を最初から作りこむという大げさなやり方は最終
手段というか、たぶん、却下されるので、それ以外のやり方で、なんと
か解決できないでしょうか?
セキュリティバグのパッチは当てていません。パッチには、リストボッ
クスの修正がもしかしたら含まれているのかもしれませんが、英語の文
献を読む限り、テキストBOXとコンボボックスの修正だけのようですし。
やたらと当てるわけにもいきません。FM20*.OCX は再配布可能パッケージ
では無いので(オフィスインストールされていれば使えるおまけライブラ
リみたいな扱いらしい)。
> やはり挙動不審になります。
なるほど。当方でも再現しました。(再現手順は今のところ不明ですが)
……ですが御存知のように、MSForm 2.0 のコントロールは、VB6 の『Form』に貼って
使うことが想定されていませんので、残念ながら、どうにもならない気がします。
もし使うとしても、[コンポーネント]の[コントロール]タブから追加するようなものではなく、
[コンポーネント]の[デザイナ]タブから追加すべき種類のコンポーネントです。
# VB6 メニューの[プロジェクト]-[その他の ActiveX デザイナ]-[Microsoft Forms 2.0 Form]から
# 『UserForm』を追加し、その中で使われるべきコントロール群。
> とりあえず修正手段が見つからず途方にくれている状態です。
可能であれば、普段使っている Form 上に貼るのではなく、MSForms の UserForm に変更することを
検討してみてください。UserForm 上で使う分には、当方では現象が再現しませんでした。
もっとも、フォームとしての機能は同一では無いので、置き換えできない状況もあるかと思いますが……。
> 当方のプロジェクトでは、このリストボックスの視覚効果がお客さんに
> 周知のようで、今更、チェックボックスの見た目を無し、にする訳には
大変かも知れませんが、問題が起こっていることを説明し、UI 変更を承諾してもらった方が良いと思いますよ。
ここで泥縄的な対応を取ったところで、システムコンポーネントの更新などによって
また別の問題が発生してしまう可能性もあるわけですから。
UserForm 確認しました。
いろいろご指導ありがとうございました。SEに内容を話し
今後の方針を立てようと思います。
ありがとうございました。
解決です。
ツイート | ![]() |