- 日時: 2012/02/07 11:08
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[リストボックス][][] * * キーワード:ドラッグ&ドロップ,マウス,項目の移動,,, * *********************************************************************************** タイトル : CheckedListBox内での移動 記 事 No : 9329 投 稿 日 : 2009/09/01(Tue) 18:06 元質問者 : bin
Vb2008 express edition を使用しています。 CheckedListBoxで項目をドラッグ&ドロップで移動させ、順番をかえたいのですが、 方法がわかりません
----------------------------------------------------------------------------------- 記事No : 9344 投稿日 : 2009/09/02(Wed) 16:55 回答者 : ダンボ ----------------------------------------------------------------------------------- > > 問題点:原案はListBoxだったからこれで良いが、bin さんの希望はCheckedListBox。 > > Checkedステータスの移動は追加しなければいけない。
下記でうまく動いたからご参考までに(苦労しないと勉強にならないか?)
Public Class Form1 Dim listSelectNo As Integer Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Load Dim str As String() = {"aaa", "bbb", "ccc", "ddd", "eee"} CheckedListBox1.Items.AddRange(str) ListBox1.Items.AddRange(str) End Sub Private Sub CheckedListBox1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles CheckedListBox1.MouseDown ' //移動元のインデックスを取得 Dim list As CheckedListBox = CType(sender, CheckedListBox) listSelectNo = list.SelectedIndex End Sub Private Sub ListBox1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown Dim list As ListBox = CType(sender, ListBox) listSelectNo = list.SelectedIndex End Sub
Private Sub CheckedListBox1_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles CheckedListBox1.MouseUp ' //移動先のインデックスを取得 Dim list As CheckedListBox = CType(sender, CheckedListBox) Dim listChangeNo As Integer = list.SelectedIndex If listChangeNo <> listSelectNo Then Dim tmpData As Object, tmpState As CheckState ' //移動元のデータを取得 tmpData = list.Items(listSelectNo) tmpState = list.GetItemCheckState(listSelectNo) ' //移動元のデータを削除 list.Items.RemoveAt(listSelectNo) ' //移動先にデータを追加 list.Items.Insert(listChangeNo, tmpData) list.SetItemCheckState(listChangeNo, tmpState) ' //選択先のインデックスを指定 list.SelectedIndex = listChangeNo End If End Sub Private Sub ListBox1_MouseUp(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseUp ' //移動先のインデックスを取得 Dim list As ListBox = CType(sender, ListBox) Dim listChangeNo As Integer = list.SelectedIndex If listChangeNo <> listSelectNo Then Dim tmpData As Object ' //移動元のデータを取得 tmpData = list.Items(listSelectNo) ' //移動元のデータを削除 list.Items.RemoveAt(listSelectNo) ' //移動先にデータを追加 list.Items.Insert(listChangeNo, tmpData) ' //選択先のインデックスを指定 list.SelectedIndex = listChangeNo End If End Sub End Class
※ ついでに、ListBox の方も実装してみました。 By 花ちゃん
上記実行図(画像をクリックすると元のサイズで見る事ができます。)
|