- PR -

ComboBoxのDropDownListが表示されない。

1
投稿者投稿内容
R70
会議室デビュー日: 2005/05/09
投稿数: 3
投稿日時: 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度表示する可能性のある画面を作成しています。

何か情報をお持ちの方や思い当たる節のある方等々、ご投稿お待ちしております。

以上
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2005-05-09 17:07
こんにちは。

同じように実装してテストしてみましたが、現象が発生しませんでした。
環境的には、ほぼ一緒です(XPがSP1)

勘ですが、EnableVisualStylesやマニフェスト等でXPスタイルを適用しているアプリケーションでしょうか?XPスタイルを適用すると、System.Windows.Forms.UnsafeNativeMethods.・・・でエラーが発生すると前にどこかで見たような。

自分はコンボボックスではありませんが、XPスタイルを適用したらたまにスクロールバーを操作できなくなるという現象に遭遇したことがあります。そのときは解決できずに、XPスタイルの適用をあきらめてしまいましたが。
R70
会議室デビュー日: 2005/05/09
投稿数: 3
投稿日時: 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との因果関係がよくわかりません。

何かご存知でしたら、是非ご投稿お願い致します。

以上
R70
会議室デビュー日: 2005/05/09
投稿数: 3
投稿日時: 2005-05-10 11:24
noderaさんへ。

すみません。ご返答を忘れてしまいました。
XPスタイルは適用しておりません。

以上
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-05-10 22:50
引用:

なお、Application.Runが2度実行されるのが拙いと予想して、1度目のApplication.RunをForm.ShowDialogにしたところ、このような現象は起こらなくなりました。PGは何とかこれで解決したいと思います。

しかし、Application.Runとの因果関係がよくわかりません。


 がんばって仕事しているのに、「がんばって仕事しろ」と言われたら、どう思います?Applicationオブジェクト君も、同じように感じたと思います...

_________________
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2005-05-11 10:47
こんにちは。

同じように実装してみましたが、結局再現しなかったです・・・・。
Application.Runの中で何がおこなわれているか正確にわかりませんが、Win32SDKのみで作った場合のお決まりパターンで、CreateWindowやメッセージループ(GetMessage/TranslateMessage/DispatchMessage等)が動作しているのでしょう。Application.Runを2度呼ぶってのは、メッセージループを2度作り出すってこと。
SDKのみで作ってたころも、そんなこと試したことも無いんで、どうなるか分からんす。
(分からないけど、2度呼び出すのはやめたほうが良いですね)

>がんばって仕事しているのに、「がんばって仕事しろ」と言われたら、どう思います?>Applicationオブジェクト君も、同じように感じたと思います...
それはイヤだったでしょう(笑)
まあ、この場合1度目の仕事は終わっているので、「がんばって仕事して、さあ帰ろうと帰り支度を始めたら、あと8時間働いてと部長に言われた気分」でしょうかw
1

スキルアップ/キャリアアップ(JOB@IT)