ListBoxのソート – プログラミング – Home

通知
すべてクリア

ListBoxのソート


GG
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

お世話になっています、GGです。

ListBoxプロパティにSortで有効と無効しているのですが、
プログラムで設定はどうなっているのでしょうか。

環境:.Net MFC使用、Win2000

よろしくお願いします。


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

…ニホンゴになってないんですけど。


返信引用
GG
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

訂正
>ListBoxプロパティにSortで有効と無効しているのですが、
>プログラムで設定はどうなっているのでしょうか。
ListBoxプロパティにSortを有効(無効)しているのですが、
プログラムの場合はどう書くのでしょうか。

よろしくお願いします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

CListBox::Createの引数でスタイルを設定することになろうかと思います。
マニュアルを読んでください。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

CListBoxの派生元にCWndクラスがあるのでCWnd::ModifyStyleを使う手もあるかと思います。
コントロールも全てウインドウの一種なのでCWndクラスのメソッドも利用可能です。
コントロールに限らず、CWndクラスから派生しているクラスは基本的にCWndクラスの
メソッドが利用できます。派生先のクラスに適当なメソッドが見つからないときは
CWndクラスの方まで確認するようにした方が良いです。
あと、コントロールやウインドウのスタイルにはCreateで生成した時にしか設定できない
タイプの物と前述のCWnd::ModifyStyleで変更可能なものがあります。
全てのスタイルがCWnd::ModifyStyleで可能なわけではありませんから注意が必要です。


返信引用
さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
 

動的にスタイルを換えるやり方を試してみました。
こんな感じでしょうか。(他にもあると思いますが・・・。)
リストボックスのプロパティがソート無の場合、ソート有に換えられました。

CListBox* myLIST = (CListBox *)GetDlgItem(IDC_LIST1);

unsigned long dwStyle;
unsigned long dwStyleEx;
CRect rect;
CFont* pFont;

dwStyle = myLIST->GetStyle();
dwStyleEx = myLIST->GetExStyle();
pFont = myLIST->GetFont();

myLIST->GetWindowRect( &rect );
this->ScreenToClient( &rect );

dwStyle |= LBS_SORT;

myLIST->DestroyWindow();

myLIST->CreateEx( dwStyleEx, _T(LISTBOX), _T("), dwStyle, rect, this,
IDC_LIST1 );
myLIST->SetFont(pFont);


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

リストボックスのソートに関しては生成時にしか設定できない仕様みたいですね。
従ってさやびさんが書かれているように切り替えるには一度破棄して生成しなおす必要が
あります。さらに言うなら中に表示すべき内容もどこかに保持しておいて再設定が
可能になるようにしておく必要もありますね。
リストボックスに入れたから取り込んだデータは破棄と言うわけには行かないです。
あと考えられる方法としてははじめからソートありのリストボックスとソート無しの
リストボックスを作成しておき、両方に同じようにデータを入れておいて
表示/非表示で切り替えるとかですかねぇ。
これだと破棄と生成という処理をする必要が無いので切り替えも早いと思います。
難点としては非表示の分のリソースも食ってしまう事とどちらを表示しているかで
処理を分岐する必要があるかもと言うことでしょうか。
もっとも後者の方は工夫次第で最小限の制御で済みそうですけれどね。


返信引用
GG
 GG
(@GG)
ゲスト
結合: 18年前
投稿: 185
Topic starter  

επιστημηさん、PATIOさん、さやぴさん
ご回答ありがとう。

一番簡単なのは、
>あと考えられる方法としてははじめからソートありのリストボックスとソート無しの
>リストボックスを作成しておき、両方に同じようにデータを入れておいて
>表示/非表示で切り替えるとかですかねぇ。
です。

さやぴさんご紹介の方法は後でやってみます。

できたら報告したします。

今回ご回答いただいて、ほんとにありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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