タイトル | : Re^6: 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) 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 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 End Class
|