- ベストアンサー
Delphi .net ListBoxで上下キーで移動したい
Delphi .net WEB版での作成です。 LISTBOXを作成するソースがあります。 --- while 条件 do begin LstBox1.Items.Insert(Row,Text); LstList.Items.Item[Row].value := LstValue; end; --- リストボックスは作成されますが、 上下キーで項目の移動ができません。 この作成をPage_Load の度に行えばできるのですが 作成処理は重いので、作成は1回のみで行いたいです。 どのようにすればよろしいのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
一般的なユーザインタフェースの観点からアドバイス申し上げます。 「項目の移動」というのは項目の位置を変える(項目が1234と並んでいるのを2134のようにする)ことだと推察しますけれども、通常、上下キーは項目の選択に使いますので、移動には使わない方がよいのではないでしょうか。ListBox内の項目を移動するインタフェースでよくあるのは、選択した項目を上移動ボタン、下移動ボタンで動かすというものです。 具体的には、例えばWindowsXP + Delphi2007 VCLフォームアプリケーションでは下記のようになります。WEB版でも同様な考え方でできると思います。 ----- procedure TForm1.UpButtonClick(Sender: TObject); // 上移動ボタンの処理 var ItemIndex: integer; begin ItemIndex:=ListBox1.ItemIndex; if ItemIndex>=1 then ListBox1.Items.Exchange(ItemIndex, ItemIndex-1); // 上の項目と交換 end; procedure TForm1.DownButtonClick(Sender: TObject); // 下移動ボタンの処理 var ItemIndex: integer; begin ItemIndex:=ListBox1.ItemIndex; if (ItemIndex<>-1) and (ItemIndex<(ListBox1.Items.Count-1)) then ListBox1.Items.Exchange(ItemIndex, ItemIndex+1); // 下の項目と交換 end; ----- 更に、項目が選択されていて移動できるときだけボタンをEnableにすれば、洗練されたインタフェースになるでしょう。 また、同じ項目を指定することが多いのでしたら選択した項目を自動的に一番上に移動しておく等も考えられます。(そもそも項目の位置が変わる/変えられることが使いやすいかどうかはよく考えた方がよいと思いますが)