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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
【お題】・忍者がやってるYouTubeが炎上してしまった理由
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
洋服何着持ってますか?
洋服を減らそうと思っているのですが、何着くらいが相場なのかわかりません。
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
SQLサーバーからひっぱるACCESSコンボボックスの上限について
SQL Server
-
フォームの再読み込み
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでActiveDirectoryのユーザ...
-
CGIで受信パラメータを解析...
-
DataGridView 複数選択で行番...
-
郵便番号検索APIにてget Elemen...
-
利用者側のMACアドレスを取得し...
-
モニタの物理解像度を得る(Win3...
-
ListView 項目の選択/選択解除...
-
VB.NETで DataRow()を利用して...
-
Spreadの選択行の取得について
-
エクセルVBAで範囲内での位置取...
-
POSTやGETの値の取得方法
-
ASP.NETでIPアドレスログイン管...
-
DOS窓の非表示
-
ホイールマウスの回すのを取得
-
ディスプレイの表示可能な解像...
-
ActiveWorkbook.Path取得できない
-
UWSCでhtmlソースの文字列を取...
-
JSP+Servletでのページングの常識
-
C#でネットワーク(LAN)上のPC...
-
36進数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
ListView 項目の選択/選択解除...
-
VBAでActiveDirectoryのユーザ...
-
VBA:小数点以下の数字を取得で...
-
count(*)で取得した値をJAVAの...
-
Flexgridで選択行の列の値を取...
-
利用者側のMACアドレスを取得し...
-
Spreadの選択行の取得について
-
VB .netにて現在時刻+1時間後...
-
VBA リストボックス内の値を複...
-
JavaScriptにおいてコンピュー...
-
JavaScriptでWindowsログオンID...
-
EXCELのリストボックスを選択し...
-
エクセルVBAで複数選択できるよ...
-
ListViewで複数選択された項目...
-
リモートコンピュータのPC名を...
-
データ数をカウントしたいのですが
-
エクセルVBAで範囲内での位置取...
-
郵便番号検索APIにてget Elemen...
-
URIでのページの移動について
おすすめ情報