1、先在窗体中画两个listbox空间,一个是获取数据库文件用(listbox1),另一个是保存从listbox1穿梭的数据;
绿色button按钮是从左到右穿梭;红色button按钮是从右到左穿梭。
label1是从左到右穿梭内容;label2是从右到左穿梭内容。
2、listbox1加载数据库数据,具体操作:listBox加载SQL Server数据库资料
3、声明两个字符串变量:
string SeleDefaceFromLB1; //从左到右穿梭变量
string SeleDefaceFromLB2; //从右到左穿梭变量
4、左侧listbox的双击选择事件:
private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if(listBox1.SelectedItems.Count == 0) // 判断双击是否为空,如为空返回
{
return;
}
SeleDefaceFromLB1 = listBox1.SelectedItem.ToString(); // 将listBox1选中的组传输给SeleDefaceFromLB1
label1.Text = SeleDefaceFromLB1; // 更改label1的名称
}
5、绿色按钮,从左到右穿梭事件:
private void btn_Add_Project_Click(object sender, EventArgs e)
{
listBox1.Items.Remove(SeleDefaceFromLB1); // 将listbox1选中的项目移出
List<string> list = listBox2.Items.Cast<string>().Select(p => p.ToString()).ToList();
if(list.Count == 1)
{
if(list[0] == "")
{
list.Clear();
}
}
list.Add(SeleDefaceFromLB1); // 添加listbox1移出的项目
UpdateListBoxFromList(listBox2, list); // 更新listbox2列表
label1.Text = ""; // 清空label1的文字内容
SeleDefaceFromLB1 = ""; // 清空SeleDefaceFromLB1的选项内容
}
以上便可实现从左到右的穿梭功能,从右到左的穿梭功能同理:
private void listBox2_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (listBox2.SelectedItems.Count == 0) // 判断双击是否为空,如为空返回
{
return;
}
SeleDefaceFromLB2 = listBox2.SelectedItem.ToString(); // 将listBox2选中的组传输给SeleDefaceFromLB2
label2.Text = SeleDefaceFromLB2; // 更改label2的名称
}
private void btn_Delete_Project_Click(object sender, EventArgs e)
{
listBox2.Items.Remove(SeleDefaceFromLB2);
List<string> list = listBox1.Items.Cast<string>().Select(p => p.ToString()).ToList();
if (list.Count == 1)
{
if (list[0] == "")
{
list.Clear();
}
}
list.Add(SeleDefaceFromLB2);
UpdateListBoxFromList(listBox1, list);
label2.Text = "";
SeleDefaceFromLB2 = "";
}
完整程序如下:
(不包含数据库加载部分)
string SeleDefaceFromLB1; //从左到右穿梭变量
string SeleDefaceFromLB2; //从右到左穿梭变量
/// <summary>
/// ListBox1双击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if(listBox1.SelectedItems.Count == 0) // 判断双击是否为空,如为空返回
{
return;
}
SeleDefaceFromLB1 = listBox1.SelectedItem.ToString(); // 将listBox1选中的组传输给SeleDefaceFromLB1
label1.Text = SeleDefaceFromLB1; // 更改label1的名称
}
private void listBox2_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (listBox2.SelectedItems.Count == 0) // 判断双击是否为空,如为空返回
{
return;
}
SeleDefaceFromLB2 = listBox2.SelectedItem.ToString(); // 将listBox2选中的组传输给SeleDefaceFromLB2
label2.Text = SeleDefaceFromLB2; // 更改label2的名称
}
/// <summary>
/// 从左到右穿梭
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Add_Project_Click(object sender, EventArgs e)
{
listBox1.Items.Remove(SeleDefaceFromLB1); // 将listbox1选中的项目移出
List<string> list = listBox2.Items.Cast<string>().Select(p => p.ToString()).ToList();
if(list.Count == 1)
{
if(list[0] == "")
{
list.Clear();
}
}
list.Add(SeleDefaceFromLB1); // 添加listbox1移出的项目
UpdateListBoxFromList(listBox2, list); // 更新listbox2列表
label1.Text = ""; // 清空label1的文字内容
SeleDefaceFromLB1 = ""; // 清空SeleDefaceFromLB1的选项内容
}
/// <summary>
/// 从右到左穿梭
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Delete_Project_Click(object sender, EventArgs e)
{
listBox2.Items.Remove(SeleDefaceFromLB2);
List<string> list = listBox1.Items.Cast<string>().Select(p => p.ToString()).ToList();
if (list.Count == 1)
{
if (list[0] == "")
{
list.Clear();
}
}
list.Add(SeleDefaceFromLB2);
UpdateListBoxFromList(listBox1, list);
label2.Text = "";
SeleDefaceFromLB2 = "";
}
/// <summary>
/// 更新ListBox
/// </summary>
/// <param name="box"></param>
/// <param name="list"></param>
private void UpdateListBoxFromList(ListBox box, List<string> list)
{
var listNew = list.OrderBy(x => x).ToList();//按照拼音排序
box.Items.Clear();
for (int i = 0; i < listNew.Count; i++)
{
box.Items.Add(listNew[i]);
}
}