- PR -

C# ComboBoxのドロップダウンリストを常に下向きに垂れ下がるようにする方法

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2007-07-11 20:30
デフォルトではスクリーンのComboBoxの位置によってドロップダウンリストが
跳ね上がったり垂れさがったりします。複数のComboBoxが縦に並んでいる場合、
ComboBoxによって動作が異なり煩わしく感じる場合があります。
どの位置のComboBoxも常時下に垂れさがるようにすることができますか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-07-11 23:35
引用:

ひろしさんの書き込み (2007-07-11 20:30) より:

デフォルトではスクリーンのComboBoxの位置によってドロップダウンリストが
跳ね上がったり垂れさがったりします。複数のComboBoxが縦に並んでいる場合、
ComboBoxによって動作が異なり煩わしく感じる場合があります。
どの位置のComboBoxも常時下に垂れさがるようにすることができますか?


どこがどう煩わしいのでしょうか? たとえば、ドロップダウンした時に見えなくなる領域があると Windows の ComboBox はそのように表示されます。 これがなされない方が煩わしいと考えます。

どうしてもと仰るのであれば、WndProc にて WM_CTLCOLORLISTBOX を捕捉して、ドロップダウン位置を固定にすればお望みのものができると思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-07-12 07:33
2年くらい前、デスクトップ座標で表示されている位置によって、ドロップダウンリストに表示される個数を変えたい、という質問があったような。
じゃんぬさんがおっしゃるように、リストが隠れるようだと上に表示されるので、反対に考えて、上に表示されないようにリストの個数を変えるとか。

ただ、1アイテムも表示されないような位置に移動されたときどうするか、は、考えておかなきゃね。
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2007-07-12 08:13
引用:

Jittaさんの書き込み (2007-07-12 07:33) より:
じゃんぬさんがおっしゃるように、リストが隠れるようだと上に表示されるので、反対に考えて、上に表示されないようにリストの個数を変えるとか。



コード:
Const DEFAULT_ITEM_COUNT As Integer = 10 ' 規定数へ設定
        ComboBox1.MaxDropDownItems = DEFAULT_ITEM_COUNT
        Dim y As Integer = ComboBox1.PointToScreen(ComboBox1.Location).Y + ComboBox1.Height
        Dim h As Integer = ComboBox1.DropDownHeight
        Dim uh As Integer = ComboBox1.DropDownHeight \ ComboBox1.MaxDropDownItems
        Dim s As Screen = Screen.FromControl(ComboBox1)
        If s.Bounds.Height > y + h Then
            Dim available As Integer = (s.Bounds.Height - y) \ uh
            If available > DEFAULT_ITEM_COUNT Then
                ComboBox1.MaxDropDownItems = DEFAULT_ITEM_COUNT
            Else
                ComboBox1.MaxDropDownItems = available
            End If
        End If



言語を確認せずに作ったのでVBで書いてしまいましたが、
こんな感じでドロップダウンで表示するデフォルトの要素数を
可変にできるかと思います。
#朝から組んでみたのでテストは不十分
#一応、マルチスクリーンは考慮してみたつもり

後、このロジックをどこに入れるかが問題です。
WndProcで補足するしかないのかどうかは未検証。

引用:

ただ、1アイテムも表示されないような位置に移動されたときどうするか、は、考えておかなきゃね。



こっちは考慮していません。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2007-07-12 17:05
ご回答ありがとうございます。
画面位置によってドロップダウンリストの要素数を調整することで解決できました。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2007-07-12 17:05
ご回答ありがとうございます。
画面位置によってドロップダウンリストの要素数を調整することで解決できました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-07-12 20:00
引用:

ひろしさんの書き込み (2007-07-12 17:05) より:
ご回答ありがとうございます。
画面位置によってドロップダウンリストの要素数を調整することで解決できました。

で?
ユーザがフォームを動かして、ひとつも表示できないような位置になった場合はどうするように対応されたのでしょう?

私は「考えなきゃダメよ」って書いたし、よねKENさんのコードは考慮されていないのですから、当然考えて実装しましたよね?


上下に分かれるのと、個数が変わるのと。ユーザにとってどっちが戸惑うだろう?
少なくとも、テスト工数が増えるから、積極的にやりなくないなぁ。

(コード書いた記憶があったんだけど、別の掲示板だったみたい。会議室ディレクトリから探したけど、見つけられなかった。)
1

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