多个combox,选中的选项其他combox中不显示与改变选项时恢复选项的问题

dh2258628 2012-11-24 10:00:43
有两个combox1和combox2,选项都是1、2、3、4。
想实现的功能是:
combox1中选1时,点combox2,combox2中没有1这个可选项,有可选项2、3、4。

combox2选一个值4,再点combox1,此时combox1中可选项没4了,有可选项1、2、3,把combox1的选中项改成3后,然后点combox2,combox2中可选项没有3,有可选项1、2、4。

就是combox中可选项的移除和恢复的问题,哎,想了多久了,搞不懂。

在校大学生一枚,各位前辈不要太不屑啊...谢谢啦
...全文
294 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdnFUCKINGSUCKS 2012-11-25
  • 打赏
  • 举报
回复
写了个示例 看看吧 你说的移除项再恢复恐怕实现起来挺困难的 看看我的方法
窗体上加两个ComboBox我就不说啦 直接上代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace My
{
public partial class Form2 : Form
{
//初始化固定选项
object[] obj = { 1, 2, 3, 4 };

public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{
//初始化两个ComboBox
comboBox1.Items.AddRange(obj);
comboBox1.SelectedIndex = 0;
comboBox2.Items.AddRange(obj);
comboBox2.SelectedIndex = 0;
}

/// <summary>
/// 当组合框的下拉部分关闭时触发此事件
/// </summary>
/// <param name="sender">事件源</param>
/// <param name="e"></param>
private void comboBox1_DropDownClosed(object sender, EventArgs e)
{
//清空候选的那个ComboBox2
comboBox2.Items.Clear();

//最好是不要写在SelectedIndexChanged事件里 因为在界面初始化的时候会执行一次


//如果不设置默认选中项的话没问题(但是不设置用户会感觉很怪 怎么没有选项)
//设置了的话到时候结果就不是你想要的了 很恶心的


//遍历固定集合 因为始终是和这四个数做比较
//你可以在脑子里模拟一下流程 最好是在纸上画下来 就会理解的
foreach (object item in obj)
{
//将不是当前选中项的值添加到候选的ComboBox里
if (comboBox1.SelectedItem != item)
{
comboBox2.Items.Add(item);
//始终选中第一位 利于观察变化
comboBox2.SelectedIndex = 0;
}
}
}

/// <summary>
/// 当组合框的下拉部分关闭时触发 详细注释请往上看
/// </summary>
/// <param name="sender">事件源</param>
/// <param name="e"></param>
private void comboBox2_DropDownClosed(object sender, EventArgs e)
{
comboBox1.Items.Clear();
foreach (object itm in obj)
{
if (comboBox2.SelectedItem != itm)
{
comboBox1.Items.Add(itm);
comboBox1.SelectedIndex = 0;
}
}
}

}
}


顺便画了张图 方便理解 看不清的话 点我
dh2258628 2012-11-25
  • 打赏
  • 举报
回复
引用 5 楼 ducker3590 的回复:
引用 4 楼 dh2258628 的回复: 引用 3 楼 ducker3590 的回复:写了个示例 看看吧 你说的移除项再恢复恐怕实现起来挺困难的 看看我的方法 窗体上加两个ComboBox我就不说啦 直接上代码 C# code? 1234567891011121314151617181920212223242526272829303132333435363738394……
之前的combobox选中的项会被清除的,那之前选中一个项不是等于白选了吗?
  • 打赏
  • 举报
回复
引用 4 楼 dh2258628 的回复:
移除我能实现,但是就是不能恢复。 朋友,您的代码每次都会重置其他combobox的值的哇...
重置就重新从数据库读取一遍 觉得你这需求用combobox还不如用textbox+click事件
csdnFUCKINGSUCKS 2012-11-25
  • 打赏
  • 举报
回复
引用 4 楼 dh2258628 的回复:
引用 3 楼 ducker3590 的回复:写了个示例 看看吧 你说的移除项再恢复恐怕实现起来挺困难的 看看我的方法 窗体上加两个ComboBox我就不说啦 直接上代码 C# code? 12345678910111213141516171819202122232425262728293031323334353637383940414243444……
重置有什么关系么? 达到你想要的效果了啊 你移除之后你的ComboBox里面的选项就改变了 再去比较的话就不对了 无论换哪边选择 你始终是要和1,2,3,4去比较的
dh2258628 2012-11-25
  • 打赏
  • 举报
回复
引用 3 楼 ducker3590 的回复:
写了个示例 看看吧 你说的移除项再恢复恐怕实现起来挺困难的 看看我的方法 窗体上加两个ComboBox我就不说啦 直接上代码 C# code? 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162……
移除我能实现,但是就是不能恢复。 朋友,您的代码每次都会重置其他combobox的值的哇...
dh2258628 2012-11-24
  • 打赏
  • 举报
回复
引用 1 楼 yxyclzx 的回复:
combox是接受数组录入的,你搞两个数组,数组里输入1,2,3,4,然后当选择某一个combox的值时,判断选得是那个,然后把另外一个combox的数据源数组,剔除掉选中的数字,在录入一遍,就是这时候另外一个combox数据源数组里只有3个值,而不是4个,不懂再问
那再次改变选项时,恢复移除的选项呢?
yxyclzx 2012-11-24
  • 打赏
  • 举报
回复
combox是接受数组录入的,你搞两个数组,数组里输入1,2,3,4,然后当选择某一个combox的值时,判断选得是那个,然后把另外一个combox的数据源数组,剔除掉选中的数字,在录入一遍,就是这时候另外一个combox数据源数组里只有3个值,而不是4个,不懂再问

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧