No.2ベストアンサー
- 回答日時:
MaxDropDownItemsプロパティを設定すれば変更できます。
danchorです。 早速のご教示ありがとうございます。
これが個々に設定出来れば作業の効率がグンと上がり、喜んでもらえそうです。
早速改訂して配布することにします。
ついでで申し訳ないのですが、確かこのドロップダウンリストに表示させる順番も変えれたような記憶があるのですが・・・。
すなわち何も指定しなかったときには5番目に表示されるがそれを1番上にして以降順番にでるようにみたいに。
でもそうすると1~4番目は後ろに廻る? それとも無視される??
すみません。 よろしくお願いいたします。
No.7
- 回答日時:
★追記
・『SendMessage』関数の戻り値や引数にキャストをつけていません。
・分かりやすくするために取り除いています。
・このため、いろいろと警告などが表示されると思いますが、そこは質問者さんが
・キャストを上手につけて下さい。
・以上。おわり。
Oh-Orangeさん 再度のご教示ありがとうございます。
「学習機能」・・・・そんなものできっこない! といとも簡単にあきらめていましたが、な~るほど! と感心しきり!
考え方をしっかり理解・整理してぜひ活用させていただきます。
「もっともっとあくなき探求心が必要」だと痛感したもうすぐ還暦近いおっさんの独り言でした。
ありがとうございました。
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++ での実装例を交えました。
・上記の部分だけでは学習機能が不揮発性ですのでソフトを終了してしまうと、次の起動で初期化されて
しまいます。これを防ぐにはファイルへ使用頻度順のコンボボックスの『学習インデックス情報』を
保存します。また、次の起動にそのファイルを読み込んで使用頻度順に再現させる必要があります。
・まずは、上記の部分を組み込んで『学習機能』ぽいのを実感(体感?)してみて下さい。
・以上。一旦おわりにします。→また何かコメントを…。
No.5
- 回答日時:
質問の意図が
1
2
3
4
5
と表示されているアイテムの3を選択した場合、
3
1
2
4
5
と表示したいのかと思いましたが、No.4さんの言われていることで
あれば、ItemsコレクションのInsertメソッドで実現できますね。
この回答への補足
danchorです。 いつもありがとうございます。
質問の仕方が悪くて申し訳ありません。
今データが
1
2
3
4
5
・
・
100
として
何もしなければ上のように現れるリストをたとえば
5
6
7
8
・
・
100
と表示させることができたとしたときに、1~4はどこに表示されるのかなぁ?と思ったわけです。
現実にはこのデータは1~100まであらかじめフォームが読み込まれたときにセットされていますが、使う人(支店)によっては自分に必要なリストが常に上位にでて欲しいという要求があるためです。
FEPのような学習機能があればいいのでしょうがそこまでの技術力がないためにお知恵を拝借したいと考えた次第です。
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/windata …
Oh-Orangeさん おはようございます。
ご教示ありがとうございます。
質問の仕方が悪くて済みません。
意図するところはNO.5さんへの補足に書かせていただきましたが、コンボボックスでのいろいろがよく分かり、大変参考になりました。
もっともっと色々本を読んだりして研究します。
今後ともよろしくお願いいたします。
No.3
- 回答日時:
>ついでで申し訳ないのですが、確かこのドロップダウンリストに表示させる順番も変えれたような記憶があるのですが・・・。
できましたっけ・・・
私は知らないでの、別の方法としては、セットしているアイテム自体
を並び替えるとか・・・
No.1
- 回答日時:
こんにちは。
NETは扱ったことないので何なんですが、
VBAでは表示行をコントロールするプロパティがありますので
親玉のVBにないはずはないですね。
VBAでは、ListRowsプロパティです。
それから最大何行表示できるか、ということはあまり意味のないことだと考えます。
何故なら・・・・・・・・・・・・。(^^;;;
以上です。
ありがとうございます。
この問題は#2の方の回答で解決ですが、今ひとつ欲が出て・・・・。
(すみません)
>それから最大何行表示できるか、ということはあまり意味のないことだと考えます。
私の場合、意味はあります。
現在デフォルトで表示は8行、データは12行分あるとすると毎回スクロールさせる必要がありますね。(順番を変えなければ)
でも今回みたいに可変であったり最大15とか決められればそれなりに考えることもできますので・・・。
この例で「最大10行」といわれたら意味ないですけどね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) ExcelVBA ドロップボックスで月を選択するとそれ以降のデータが残るようにしたい。 3 2022/12/16 14:53
- ドライブ・ストレージ HDDの未割り当て領域が認識されない 7 2022/11/27 18:51
- その他(ブログ) bloggerのレイアウト→ページリストに入りきらない(テーマ:contempo light) 1 2023/05/12 11:06
- 数学 多様体について質問です。 Rを実数全体としてf:S^n={(p_1,…,p_(n+1)∈R^(n+1 2 2023/06/24 00:54
- Google Drive Google Drive (G:)の容量を、購入した容量と一致させるにはどうすればよいでしょうか? 1 2022/04/10 22:32
- アプリ uqモバイルについて再度質問させていただきます my uq mobileのデータ使用量・現在量の表示 1 2022/08/13 08:17
- 教えて!goo このアプリ不具合多くないですか?知恵袋の回答が来なさすぎて最近こっち来たんですけど、最初は「お礼」「 4 2022/09/30 02:54
- その他(プログラミング・Web制作) Pythonを用いたフラッシュ暗算ソフトの開発に必要なもの 2 2023/01/29 02:22
- その他(Microsoft Office) Officeの使用開始とプロダクトキーについて 1 2022/10/10 23:55
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
【大喜利】看板の文字を埋めてください
旅行先でほぼ消えかけている看板に出会いました。 何を気を付ければいいのか穴埋めをして教えてください。
-
何歳が一番楽しかった?
自分の人生を振り返ったとき、何歳のころが一番楽しかったですか? 子供の頃でしょうか、それとも大人になってからでしょうか。
-
我がまちの「給食」自慢を聞かせてっ!
富山県の給食には「ベニズワイガニ」が出る、、、なんて話を聞いたことがあります。 日本全国「え、給食にそれ出るの!?」な驚きメニューがまだまだあるはず!
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
SQLサーバーからひっぱるACCESSコンボボックスの上限について
SQL Server
-
フォームの再読み込み
Visual Basic(VBA)
-
-
4
コンボボックス ▼ボタンをクリックしたらイベント
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
Flexgridで選択行の列の値を取...
-
VBAでActiveDirectoryのユーザ...
-
count(*)で取得した値をJAVAの...
-
VBA:小数点以下の数字を取得で...
-
JavaScriptでWindowsログオンID...
-
ListView 項目の選択/選択解除...
-
HKEY_USERS下のキーを取得したい
-
郵便番号検索APIにてget Elemen...
-
JavaScriptにおいてコンピュー...
-
ドロップダウンリストの初期表...
-
VBScriptで数値にコンマを付け...
-
DataGridView 複数選択で行番...
-
VB .netにて現在時刻+1時間後...
-
VBA リストボックス内の値を複...
-
利用者側のMACアドレスを取得し...
-
VBscriptでinnerHTMLを変数に取...
-
JFreeChartの折れ線グラフの太...
-
ListViewで複数選択された項目...
-
現在時刻をミリ秒まで取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
VBA:小数点以下の数字を取得で...
-
「Excel VBA」 Webクエリ マク...
-
VBAでActiveDirectoryのユーザ...
-
ListView 項目の選択/選択解除...
-
count(*)で取得した値をJAVAの...
-
利用者側のMACアドレスを取得し...
-
Spreadの選択行の取得について
-
Flexgridで選択行の列の値を取...
-
like演算子内に変数って使えな...
-
データ数をカウントしたいのですが
-
JavaScriptでWindowsログオンID...
-
エクセルVBAで複数選択できるよ...
-
VBA リストボックス内の値を複...
-
JavaScriptにおいてコンピュー...
-
時間を分に変換するプログラム
-
NTPサーバから時刻を取得する
-
ListViewで複数選択された項目...
-
VBScriptで数値にコンマを付け...
-
コンボボックス表示文字列を取...
おすすめ情報