- ゆうか
- ベテラン
- 会議室デビュー日: 2004/04/01
- 投稿数: 62
|
投稿日時: 2004-04-04 18:59
MaxDropDownItemsというプロパティがありますが
例えば、MaxDropDownItemsを100にした場合
リストが画面いっぱいになってしまい
リストの下のほうの項目が選択できません。
自動的に制御したり出来ないものなんでしょうか?
各画面でコンボボックスの位置が違うんですが
MaxDropDownItemsの値をなるべく大きくし
リストを画面いっぱいに表示したいのですが...。
|
- Jitta
- ぬし
- 会議室デビュー日: 2002/07/05
- 投稿数: 6267
- お住まい・勤務地: 兵庫県・海手
|
投稿日時: 2004-04-05 08:37
- Control.TopとControl.Leftを、Control.PointToScreenメソッドで画面座標に変換する
- Screen.GetWorkingAreaメソッドで、画面範囲を取得する
- 画面範囲とコントロールの画面座標から、表示可能範囲を計算する
- コントロールに表示しているFont.Heightから、フォントの高さを取得する
- 表示可能範囲とフォントの高さから、表示できる行数を計算する
こんなところかな?
|
- ゆうか
- ベテラン
- 会議室デビュー日: 2004/04/01
- 投稿数: 62
|
投稿日時: 2004-04-05 11:11
ありがとうございますm(__)m
|
- Jitta
- ぬし
- 会議室デビュー日: 2002/07/05
- 投稿数: 6267
- お住まい・勤務地: 兵庫県・海手
|
投稿日時: 2004-04-05 11:47
かなり誤差が出るけど。。。
コード: |
|
// comboBoxの画面座標を求める
Point cbx = new Point(this.comboBox1.Left, this.comboBox1.Top);
Point srcPt = comboBox1.PointToScreen(cbx);
// ディスプレイの画面範囲を求める
System.Drawing.Rectangle wa = Screen.GetWorkingArea(this);
// 画面範囲-画面座標で、表示可能範囲を求める
int h = wa.Height - srcPt.Y;
// フォントの高さで割って、行数を求める
// 1以下ならば1とする
comboBox1.MaxDropDownItems = (h / comboBox1.Font.Height > 1 ?
h / comboBox1.Font.Height : 1);
|
|
- ゆうか
- ベテラン
- 会議室デビュー日: 2004/04/01
- 投稿数: 62
|
投稿日時: 2004-04-05 11:58
ご丁寧にありがとうございます。
|
- Jitta
- ぬし
- 会議室デビュー日: 2002/07/05
- 投稿数: 6267
- お住まい・勤務地: 兵庫県・海手
|
投稿日時: 2004-04-05 12:18
引用: |
|
Jittaの書き込み (2004-04-05 11:47) より:
コード: |
|
// comboBoxの画面座標を求める
Point cbx = new Point(this.comboBox1.Left, this.comboBox1.Top);
Point srcPt = comboBox1.PointToScreen(cbx);
// ディスプレイの画面範囲を求める
System.Drawing.Rectangle wa = Screen.GetWorkingArea(this);
// 画面範囲-画面座標で、表示可能範囲を求める
int h = wa.Height - srcPt.Y;
// フォントの高さで割って、行数を求める
// 1以下ならば1とする
comboBox1.MaxDropDownItems = (h / comboBox1.Font.Height > 1 ?
h / comboBox1.Font.Height : 1);
|
|
不思議???
comboBox1.PointToScreen(cbx)だと、スクリーンが1280×1024なのに、コントロールの左上のY座標が1024をオーバーしてしまう。
これを、this.PointToScreen(cbx)に変更すると、スクリーン内に収まるが…なぜ?
ちなみに、「画面をオーバーします」。なぜかというと、計算をコンボボックスの「左上座標」で計算しているから。「左下座標」で計算する為には…
|