• ベストアンサー

コンボボックスの表示は最大何行?

いつもお世話になります。 VB.NET2003で開発しています。 いままで全然気にしておらず、質問が来て初めて気がつきましたが、 現在使っているコンボボックスに現れるデータはすべて8個なんですね。 これをもっと多くするにはどうしたらいいのでしょうか? また最大表示出来る数はいくらなのでしょうか? 初歩的な質問で恐縮ですがよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • unamana19
  • ベストアンサー率62% (56/89)
回答No.2

MaxDropDownItemsプロパティを設定すれば変更できます。

danchor
質問者

お礼

danchorです。 早速のご教示ありがとうございます。 これが個々に設定出来れば作業の効率がグンと上がり、喜んでもらえそうです。 早速改訂して配布することにします。 ついでで申し訳ないのですが、確かこのドロップダウンリストに表示させる順番も変えれたような記憶があるのですが・・・。 すなわち何も指定しなかったときには5番目に表示されるがそれを1番上にして以降順番にでるようにみたいに。 でもそうすると1~4番目は後ろに廻る? それとも無視される?? すみません。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (6)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.7

★追記 ・『SendMessage』関数の戻り値や引数にキャストをつけていません。 ・分かりやすくするために取り除いています。 ・このため、いろいろと警告などが表示されると思いますが、そこは質問者さんが ・キャストを上手につけて下さい。 ・以上。おわり。

danchor
質問者

お礼

Oh-Orangeさん 再度のご教示ありがとうございます。 「学習機能」・・・・そんなものできっこない! といとも簡単にあきらめていましたが、な~るほど! と感心しきり! 考え方をしっかり理解・整理してぜひ活用させていただきます。   「もっともっとあくなき探求心が必要」だと痛感したもうすぐ還暦近いおっさんの独り言でした。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.6

★どうやら回答者 No.5 さんの考えが近いようですね。 ・FEP のような学習機能を実現するにはコンボボックスのデータ項目1つ1つに  インデックス番号(支店名コード)などを関連付けてセット(管理)します。  この関連付けは『CB_SETITEMDATA』というメッセージで行えます。 ・その後、ユーザさんが選択したデータ項目を最上位に移動させます。 ・移動はデータ項目と関連付けたインデックス番号(支店名コード)をペアで行います。 ・移動は『選択位置の取得』→『選択位置の削除』→『先頭位置への挿入』という  3ステップが基本です。 ・これで使用頻度が高い順に最上位にデータ項目が移っていきます。  これが学習機能ですね。 ・下に簡単なサンプルを載せますが、C/C++ ですよ。 サンプル:初期設定(フォームに読み込ませる最初) static LPCTSTR lpTable[] = { 文字列0番 … 文字列100番, NULL }; LPCTSTR *lpSeek = lpTable; INT nIndex; ←インデックス番号(支店名コード) for ( nIndex = 0 ; *lpSeek != NULL ; nIndex++ ){  SendMessage( Combo.hWnd, CB_INSERTSTRING, nIndex, *lpSeek ); ←データ項目(支店名・文字列)  SendMessage( Combo.hWnd, CB_SETITEMDATA, nIndex, nIndex ); ←インデックス番号を関連付ける  lpSeek++; } サンプル:学習機能(選択した項目を上位に移動) TCHAR szBuffer[ 256 ]; ←文字列領域 INT nSelect; ←選択位置 INT nIndex; ←インデックス番号(支店名コード) nSelect = SendMessage( Combo.hWnd, CB_GETCURSEL, 0, 0 ); ←選択位置の取得 nIndex = SendMessage( Combo.hWnd, CB_GETITEMDATA, nSelect, 0 ); ←選択位置のインデックス番号を取得 SendMessage( Combo.hWnd, CB_GETLBTEXT, nSelect, szBuffer ); ←選択位置の文字列取得 SendMessage( Combo.hWnd, CB_DELETESTRING, nSelect, 0 ); ←選択位置の削除 SendMessage( Combo.hWnd, CB_INSERTSTRING, 0, szBuffer ); ←先頭位置への挿入 SendMessage( Combo.hWnd, CB_SETITEMDATA, 0, nIndex ); ←先頭位置へインデックス番号を関連付ける サンプル:項目位置取得(選択している項目のインデックス番号を取得) INT nSelect; ←選択位置 INT nIndex; ←インデックス番号(支店名コード) nSelect = SendMessage( Combo.hWnd, CB_GETCURSEL, 0, 0 ); ←選択位置の取得 nIndex = SendMessage( Combo.hWnd, CB_GETITEMDATA, nSelect, 0 ); ←選択位置のインデックス番号を取得 return( nIndex ); ←これがインデックス番号(支店名コード)になります 最後に: ・言葉での説明が難しいので C/C++ での実装例を交えました。 ・上記の部分だけでは学習機能が不揮発性ですのでソフトを終了してしまうと、次の起動で初期化されて  しまいます。これを防ぐにはファイルへ使用頻度順のコンボボックスの『学習インデックス情報』を  保存します。また、次の起動にそのファイルを読み込んで使用頻度順に再現させる必要があります。 ・まずは、上記の部分を組み込んで『学習機能』ぽいのを実感(体感?)してみて下さい。 ・以上。一旦おわりにします。→また何かコメントを…。

全文を見る
すると、全ての回答が全文表示されます。
  • unamana19
  • ベストアンサー率62% (56/89)
回答No.5

質問の意図が 1 2 3 4 5 と表示されているアイテムの3を選択した場合、 3 1 2 4 5 と表示したいのかと思いましたが、No.4さんの言われていることで あれば、ItemsコレクションのInsertメソッドで実現できますね。

danchor
質問者

補足

danchorです。 いつもありがとうございます。 質問の仕方が悪くて申し訳ありません。 今データが 1 2 3 4 5 ・ ・ 100 として 何もしなければ上のように現れるリストをたとえば 5 6 7 8 ・ ・ 100 と表示させることができたとしたときに、1~4はどこに表示されるのかなぁ?と思ったわけです。 現実にはこのデータは1~100まであらかじめフォームが読み込まれたときにセットされていますが、使う人(支店)によっては自分に必要なリストが常に上位にでて欲しいという要求があるためです。 FEPのような学習機能があればいいのでしょうがそこまでの技術力がないためにお知恵を拝借したいと考えた次第です。

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★私は C/C++ 言語ですが、ドロップダウンリストの順序は変更できますよ。 ・ただ、Visual Basic で簡単に変更できるかは知りませんが…。 ・ということで今後の参考にして下さい。 紹介: ・コンボボックスという GUI 部品を操作するには通常は、その部品に対して  いろいろな動作の指示を CB_xxxxx メッセージを送信してやり取りします。 ・『CB_RESETCONTENT』は、データ項目をすべてクリア。 ・『CB_GETCOUNT』は、データ項目の数を取得。 ・『CB_GETCURSEL』は、選択位置を取得。 ・『CB_SETCURSEL』は、選択位置を設定。 ・『CB_FINDSTRING』は、文字列を検索してその位置を取得。 ・『CB_SELECTSTRING』は、選択位置の文字列を取得。 ・『CB_INSERTSTRING』は、指定位置に文字列を挿入。 ←※ ・『CB_ADDSTRING』は、一番下に文字列を追加。 ・『CB_DELETESTRING』は、指定位置の文字列を削除。 ・上記以外にもいろいろと CB_xxxxx メッセージがあります。 本題: ・それで通常は『CB_ADDSTRING』メッセージで一番下に文字列を追加します。 ・そしてある時『CB_INSERTSTRING』メッセージで一番上に文字列を挿入するように  指定すれば回答者 No.2 さんの『回答へのお礼』が実現できます。 ・これらの操作は『PostMessage』、『SendMessage』、『SendDlgItemMessage』の  API 関数などで行います。→Visual Basic で簡単に呼び出せますか? 書式: ・『SendMessage( hWnd, CB_ADDSTRING, 0, 文字列配列 );』 ・『SendMessage( hWnd, CB_INSERTSTRING, 挿入位置(0から始まる), 挿入文字列 );』 ・『hWnd』がコンボボックスのウインドウ・ハンドルです。 ・以上。おわり。

参考URL:
http://wisdom.sakura.ne.jp/system/winapi/windata1.html
danchor
質問者

お礼

Oh-Orangeさん おはようございます。 ご教示ありがとうございます。 質問の仕方が悪くて済みません。 意図するところはNO.5さんへの補足に書かせていただきましたが、コンボボックスでのいろいろがよく分かり、大変参考になりました。 もっともっと色々本を読んだりして研究します。 今後ともよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。
  • unamana19
  • ベストアンサー率62% (56/89)
回答No.3

>ついでで申し訳ないのですが、確かこのドロップダウンリストに表示させる順番も変えれたような記憶があるのですが・・・。 できましたっけ・・・ 私は知らないでの、別の方法としては、セットしているアイテム自体 を並び替えるとか・・・

全文を見る
すると、全ての回答が全文表示されます。
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

こんにちは。 NETは扱ったことないので何なんですが、 VBAでは表示行をコントロールするプロパティがありますので 親玉のVBにないはずはないですね。 VBAでは、ListRowsプロパティです。 それから最大何行表示できるか、ということはあまり意味のないことだと考えます。 何故なら・・・・・・・・・・・・。(^^;;; 以上です。

danchor
質問者

お礼

ありがとうございます。 この問題は#2の方の回答で解決ですが、今ひとつ欲が出て・・・・。 (すみません) >それから最大何行表示できるか、ということはあまり意味のないことだと考えます。 私の場合、意味はあります。 現在デフォルトで表示は8行、データは12行分あるとすると毎回スクロールさせる必要がありますね。(順番を変えなければ) でも今回みたいに可変であったり最大15とか決められればそれなりに考えることもできますので・・・。 この例で「最大10行」といわれたら意味ないですけどね。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Spreadのコンボボックス

    いつもお世話になっております。 VB.NET2003とSpread2.5Jにて開発を行っております。 コンボボックスの列を作成し、コンボボックスへの入力も可能としたいのですが、どのようにすれば良いのでしょうか? (ComboBoxCellType.Editable の値を True にして入力は出来たのですが、コンボボックスのセルから抜けると入力された値が消えてしまいます。) どなたかご存知でしたらお教え願います。

  • データと直結したコンボボックスについて

    初めて質問します。 VB6とオラクルでの開発でコンボボックスを使います。 ユーザーの要望は、途中まで入力した内容に合うデータをコンボボックスのリストに表示して欲しいとのことなのですが、VBに入っている通常のコンボボックスで対応できるんでしょうか? また、出来なければ利用可能なツールなどがありましたら教えてください。

  • コンボボックスのドロップダウン

    当方、VBは全くの初心者なので、質問させていただきます。 コンボボックスがgetfocusした際に、自動でドロップダウンするように するには、どのようにすればいいのでしょうか。 初歩的なことで恐縮ですが、どなたかお教えください。

  • Access コンボボックスに空のレコードを表示しない方法

    いつもお世話になっています。 下記の様に空データを持つテーブルの列【名称】をコンボボックスを作る際に空データのレコード【2】は表示させないようにするにはどうしたら良いのでしょうか? CD 名称  日時 1   a  07/12/01 2        3   b  08/11/30 :  :   : :  :   : :  :   : 初歩的な質問で恐縮ですがご教示ください。 宜しくお願いします。     

  • VB2005でコンボボックスのデフォルト表示したいのですが。。。

    いつもお世話になります。 VB2005で初歩的な質問をさせていただきます。 入力画面を作っててその中にコンボボックスがあります。 コレクションで区分1、区分2、区分3・・・と書いているのですが、画面を表示させたときに選択する前に「区分1」がデフォルトで表示させたいのですがどのように記述したらよいのでしょうか。 よろしくお願いいたします。

  • コンボボックスについて

    お世話になっております Visual Strudio 2010、.NetFramwork 3.5 で開発をしています VisualStudioの中のVBで、Windowsフォームの画面の開発をしています コンボボックスで質問なのですが、 コンボボックスで、「text」と、「value」を追加しようと思っています DataTable、ArrayList以外での「text」「value」の両方追加は可能でしょうか VB2003の、Webフォームで開発していたときは Combobox.additem(New ListItem("Key", "Disp") ができたのですが・・・ これと似たような機能は2010ではないのでしょうか もうひとつ、ArrayListで追加する場合、ArryListの順番がそのままValueの値になってしまいますが、ランダムな並びの数字のvalueでも、ArrayListでComboboxに追加できるでしょうか・・・

  • フレキシブルグリット コンボボックス

    いつもお世話になっております。 VB6.0を使用しています。 (1) コンボボックスを用いて従業員(10名)のリストから選べるようになっています。 質問なのですが,フレキシブルグリットのあるセルにコンボボックスを使用することはできませんか? (1,1)のセルに 10の氏名から1つ選んで 格納したいです。 以下のようにすればできるかと思ったのですができませんでした。 よろしく御願いします。 MSFlexGrid1.TextMatrix(1, 1) = Combo1.List(10)

  • Excel VBA コンボボックスの使い方

     VBAでのコンボボックスの使い方をしらべているのですが、うまく見つかりません。コンボボックスのリストに登録するのはどうしたらよいのでしょうか?シート上のセル内のデータを使用しないとリストの登録は出来ないのでしょうか?VBA上で作成して、ユーザーフォームで選択できるようにしたいと思っています。VBAをはじめたばかりなので初歩的な質問で大変恐縮です。どなたかわかる方がいらっしゃったらお願い致します。

  • VB.NET コンボボックスの表示について

    vb2010で作成しています。 コンボボックスの表示 ⇒ 更新をどう処理するのか分かりません。 例えば下記のようなフルーツテーブルがあったとします。 ・リンゴ ・ミカン ・モモ テーブルから「ミカン」を取得し、コンボボックスへ表示する所までは出来ました。 その後に、「ミカン」から「リンゴ」に変換したい場合、テーブルからコンボボックスへデータを渡すと、 ・ミカン ・リンゴ ・ミカン ・モモ と「ミカン」が2個表示されてしまいます。 こういう場合どのようにプログラムを作成するのがベストなのでしょうか? 自分で試したのは、ミカンの情報を保持したまま、一旦コンボボックスをクリアし、 そのあとミカン以外のデータを再度読み込み、コンボボックスへ渡すようにしました。 結果は ・ミカン ・リンゴ ・モモ となります。 無駄な処理をしているとしか思えず、他に良い方法があるように思い、質問させて頂きました。 VB.NETは現在手探りで作っている感じで分からない事が多いのですが、分かる方がいらっしゃったら教えて下さい。 よろしくお願い致します。

  • コンボボックスを開いた時の表示されるメニューを増やすには?

    WINDOWS XP,VB6.0,SP6で開発しています。 コンボボックスの▼の部分をクリックしたときに開く、 プルダウンメニューの高さを高くしたいんです。 現在は8個のメニューしか表示されず、 スクロールバーが小さくなってしまうので、 表示されるメニュー数を10個とか15個とかにしたいのですが、 そういう変更は可能なのでしょうか? どうぞ、ご教授よろしくお願いしますm(_ _)m

キウイの元気がない
このQ&Aのポイント
  • キウイの苗木の葉っぱがふにゃふにゃで元気がないです。原因は何でしょうか?
  • キウイの苗木の元気がない理由として、環境や水やり、土壌条件などが考えられます。
  • キウイの苗木が元気がない場合は、日当りの良さ、水やりの頻度や量、土壌の肥沃度を確認してみると良いでしょう。
回答を見る

専門家に質問してみよう