- - PR -
ComboBoxのDropDownListが表示されない。
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-05-09 15:49
以下現象が発生して困っています。
環境:.netFramework1.1(SP1),WindowsXP(SP2),VisualStudio2003 1.FormにTabControlを貼り付け。TabPageを2枚追加。 2.2枚目の「TabPage2上」に、ComboBoxとButtonを追加。ComboBoxの DropDownStyleはDrpDownListにします。 3.以下コードを記載。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim dTable As DataTable = New DataTable dTable.Columns.Add("Display") dTable.Columns.Add("Value") Dim dRow As DataRow = dTable.NewRow For i As Integer = 0 To 2 dRow = dTable.NewRow dRow("Display") = i.ToString & "番目" dRow("Value") = i.ToString dTable.Rows.Add(dRow) Next Me.cboNormal.DataSource = dTable Me.cboNormal.DisplayMember = "Display" Me.cboNormal.ValueMember = "Value" End Sub Private Sub Button13_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button13.Click MessageBox.Show("W00001") MessageBox.Show("W00001") End Sub 4.デバッグモードでコンパイルし、実行。 5.TabPage2を選択し、Button1をクリック。MessageBoxが2回表示。 6.ComboBoxをクリックしても、DropDownListが表示されません! ポイントとしては、Formの表示後、2枚目以降のTabPageを表示し、 そしてそこのDataSourceを使用したコンボボックスにおいて、 一度もDropDownListを表示せずにMessegeBoxを2回表示すると、 DropDownListが表示されなくなる、といった感じ時です。 5.のButton1クリックの前に、一度でもDropDownListを表示させると このような現象はおこりません。 また、ButtonのClickイベントでMessageBox.Showメソッドを1回だけ 呼び出すようにしても、ボタンを2回押せば同じ現象になります。 また、稀に System.Windows.Forms.UnsafeNativeMethods.CallWindowProc にて、 NullReferenceException が発生して強制終了されることもあるようです。 (規則性は今のところ不明です。Windows2000で行うとよく発生するという こともあるようですが・・・) 当方としては、DataSourceもTabPageも使いたく、Form表示後にMessageBoxが 2度表示する可能性のある画面を作成しています。 何か情報をお持ちの方や思い当たる節のある方等々、ご投稿お待ちしております。 以上 | ||||
|
投稿日時: 2005-05-09 17:07
こんにちは。
同じように実装してテストしてみましたが、現象が発生しませんでした。 環境的には、ほぼ一緒です(XPがSP1) 勘ですが、EnableVisualStylesやマニフェスト等でXPスタイルを適用しているアプリケーションでしょうか?XPスタイルを適用すると、System.Windows.Forms.UnsafeNativeMethods.・・・でエラーが発生すると前にどこかで見たような。 自分はコンボボックスではありませんが、XPスタイルを適用したらたまにスクロールバーを操作できなくなるという現象に遭遇したことがあります。そのときは解決できずに、XPスタイルの適用をあきらめてしまいましたが。 | ||||
|
投稿日時: 2005-05-10 11:20
すみません。他にも条件がありました。
・プロジェクトにForm2とForm3を追加。 ・Form2にボタンを追加し、以下コードを追加。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim frm As Form1 = New Form1 frm.Show() end sub ・プロジェクトのスタートアップをSubMainにする。 ・プロジェクトにモジュールを追加し、SubMainプロシージャを追加。 Module Module1 Sub main() Dim frm As New Form3 Application.Run(frm) Dim frm1 As New Form2 Application.Run(frm1) End Sub End Module ・Debugでコンパイルして実行。 ・Form3表示→×ボタンでForm3Close →Form2表示ボタン押し→Form1表示→TabPage2を選択→Form1を×ボタンでClose →再度Form2のボタン押し→Form1表示→TabPage2を選択 →TabPage2上のボタン押し→ダイアログ2回表示 →コンボボックスをクリックするがドロップダウンが表示されず。 となりました。 (すみません、複雑に絡んでいた条件が整理しきれていませんでした) なお、Application.Runが2度実行されるのが拙いと予想して、1度目の Application.RunをForm.ShowDialogにしたところ、このような現象は 起こらなくなりました。PGは何とかこれで解決したいと思います。 しかし、Application.Runとの因果関係がよくわかりません。 何かご存知でしたら、是非ご投稿お願い致します。 以上 | ||||
|
投稿日時: 2005-05-10 11:24
noderaさんへ。
すみません。ご返答を忘れてしまいました。 XPスタイルは適用しておりません。 以上 | ||||
|
投稿日時: 2005-05-10 22:50
がんばって仕事しているのに、「がんばって仕事しろ」と言われたら、どう思います?Applicationオブジェクト君も、同じように感じたと思います... _________________ | ||||
|
投稿日時: 2005-05-11 10:47
こんにちは。
同じように実装してみましたが、結局再現しなかったです・・・・。 Application.Runの中で何がおこなわれているか正確にわかりませんが、Win32SDKのみで作った場合のお決まりパターンで、CreateWindowやメッセージループ(GetMessage/TranslateMessage/DispatchMessage等)が動作しているのでしょう。Application.Runを2度呼ぶってのは、メッセージループを2度作り出すってこと。 SDKのみで作ってたころも、そんなこと試したことも無いんで、どうなるか分からんす。 (分からないけど、2度呼び出すのはやめたほうが良いですね) >がんばって仕事しているのに、「がんばって仕事しろ」と言われたら、どう思います?>Applicationオブジェクト君も、同じように感じたと思います... それはイヤだったでしょう(笑) まあ、この場合1度目の仕事は終わっているので、「がんばって仕事して、さあ帰ろうと帰り支度を始めたら、あと8時間働いてと部長に言われた気分」でしょうかw |
1