リストボックスの複数選択について – プログラミング – Home

リストボックスの複数選択について
 
通知
すべてクリア

[解決済] リストボックスの複数選択について


流々華
 流々華
(@流々華)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

リストボックスの複数選択についての質問です。

VC++6.0を始めてまだ1週間の初心者で、おかしな質問をするかもしれませんが
よろしくお願いします。

複数選択リストボックスをMFC、SDI(FormView)に設置しています。
ここで、この複数選択されたリストの項目番号を取得して、それに見合った
配列のデータを印刷したいと考えています。

ここで、教えていただきたいポイントは、複数選択したリストの項目の取得方法です。
GetSelCountやGetSelItemsを使うという事までは何とか解りましたが、
ヘルプを見ても、ここからどうコードを書いてよいのかわからず、1日中悩んでおります。
基本的な質問になってしまいましたが、できれば少し具体的なコードの書き方を
ご教示願えませんでしょうか?

よろしくお願いします。


引用未解決
トピックタグ
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

GetSelItems()の使い方がよくわからない、ということでよろしいでしょうか?

int GetSelItems( int nMaxItems, LPINT rgIndex ) const;

おそらく、

int rgIndex[100];
m_wnbLB.GetSelItems(100, rgIndex);

ということですよね?
(m_wnbLBはCListBox型です。)
事前に配列を用意しておいて、第2引数に与えると、
選択された項目のインデックスが配列に入ってくる、と。


返信引用
流々華
 流々華
(@流々華)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

sugar様、早速のアドバイスありがとうございました。
無事、選択された項目番号の取得ができました!

ところで、書いて頂いたコードの配列は予め、100まで要素を
指定されてありますが、これをリスト内で選択された項目分までの要素にすることは
できるのでしょうか?

追加質問になってしいまい、申し訳ありません。


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
 

GetFirstSelectedItemPositionとGetNextSelectedItemを使用すれば可能です。


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

こんな感じかな・・

int iCount = m_wndLB.GetSelCount();
int* paIndex = new int[iCount];
m_wnbLB.GetSelItems(iCount, paIndex );
.
.
//使用後
delete [] paIndex;


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
 

サンプルを書いてみました。

// m_Listはリストコントロールのメンバ変数です。
POSITION pos = m_List.GetFirstSelectedItemPosition();
int Index = 0;
int nItem;

if (pos == NULL){
;// 全く選択されていない
}
else{
while (pos)
{
nItem = m_List.GetNextSelectedItem(pos);
for( Index; Index < nItem; Index++ ){
;// この範囲内は選択されていない
}
// 選択されている
Index = nItem;
// Indexの値を使って、選択処理をしてください。
Index++; // 次の範囲ポジション
}
for( Index; Index < m_List.GetItemCount(); Index++ ){
;// 残りはは選択されていない
}
}


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

クリリンさんへ
>GetFirstSelectedItemPositionとGetNextSelectedItemを使用すれば可能です。
これは、リストコントロールの場合です

質問は、リストボックスです(^^;


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
 

ごめんなさい。
リストボックスをリストコントロールと勘違いしていました。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

> ところで、書いて頂いたコードの配列は予め、100まで要素を
> 指定されてありますが、これをリスト内で選択された項目分までの要素にすることは
> できるのでしょうか?
>
不良PGさんが提示してらっしゃるので、私からは特によいですね。
既に察してらっしゃるかと思いますが、
私の「100」は、あくまで例ですので。


返信引用
流々華
 流々華
(@流々華)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

不良PG様、クリリン様、sugar様、たくさんのアドバイスありがとうございました!

そこで、不良PG様からのコードを実行してみたのですが、
例えば、リストボックスに表示されている1番目と3番目を選択して、
デバッグしてみると、paIndexの中に、0x003461e0と1が入っていました。

まだまだ言語の意味が分かっていなくてお恥ずかしいのですが、
何故このような値が入ってくるのか教えていただけませんでしょうか?
おそらくポインタの理解ができていないと思います...。
本当に申し訳ありません!!!


返信引用
不良PG
 不良PG
(@不良PG)
ゲスト
結合: 23年前
投稿: 80
 

大サービスです・・

int iIndex;
for( iIndex = 0; iIndex < iCount ; iIndex++ )
{
int iSelectIndex = paIndex[iIndex];
.
.
}


返信引用
流々華
 流々華
(@流々華)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

不良PG様、早急なレスありがとうございました。

しかも大サービスまでしてくださって大変感謝しております。
今、早速実現したい処理を付け加えて、実行してみたところ、
上手く動作させる事ができました。
感激です!!!

これからは、もっとコードの理解、応用ができるように
勉強を進めていきたいとおもいます。

本当にありがとうございました!!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました