想实现的功能是:
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中可选项的移除和恢复的问题,哎,想了多久了,搞不懂。
在校大学生一枚,各位前辈不要太不屑啊...谢谢啦
7 个解决方案
#1
combox是接受数组录入的,你搞两个数组,数组里输入1,2,3,4,然后当选择某一个combox的值时,判断选得是那个,然后把另外一个combox的数据源数组,剔除掉选中的数字,在录入一遍,就是这时候另外一个combox数据源数组里只有3个值,而不是4个,不懂再问
#2
那再次改变选项时,恢复移除的选项呢?
#3
写了个示例 看看吧 你说的移除项再恢复恐怕实现起来挺困难的 看看我的方法
窗体上加两个ComboBox我就不说啦 直接上代码
顺便画了张图 方便理解 看不清的话 点我
窗体上加两个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;
}
}
}
}
}
顺便画了张图 方便理解 看不清的话 点我
#4
移除我能实现,但是就是不能恢复。
朋友,您的代码每次都会重置其他combobox的值的哇...
#5
重置有什么关系么? 达到你想要的效果了啊
你移除之后你的ComboBox里面的选项就改变了 再去比较的话就不对了 无论换哪边选择 你始终是要和1,2,3,4去比较的
#6
重置就重新从数据库读取一遍
觉得你这需求用combobox还不如用textbox+click事件
#7
之前的combobox选中的项会被清除的,那之前选中一个项不是等于白选了吗?
#1
combox是接受数组录入的,你搞两个数组,数组里输入1,2,3,4,然后当选择某一个combox的值时,判断选得是那个,然后把另外一个combox的数据源数组,剔除掉选中的数字,在录入一遍,就是这时候另外一个combox数据源数组里只有3个值,而不是4个,不懂再问
#2
那再次改变选项时,恢复移除的选项呢?
#3
写了个示例 看看吧 你说的移除项再恢复恐怕实现起来挺困难的 看看我的方法
窗体上加两个ComboBox我就不说啦 直接上代码
顺便画了张图 方便理解 看不清的话 点我
窗体上加两个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;
}
}
}
}
}
顺便画了张图 方便理解 看不清的话 点我
#4
移除我能实现,但是就是不能恢复。
朋友,您的代码每次都会重置其他combobox的值的哇...
#5
重置有什么关系么? 达到你想要的效果了啊
你移除之后你的ComboBox里面的选项就改变了 再去比较的话就不对了 无论换哪边选择 你始终是要和1,2,3,4去比较的
#6
重置就重新从数据库读取一遍
觉得你这需求用combobox还不如用textbox+click事件
#7
之前的combobox选中的项会被清除的,那之前选中一个项不是等于白选了吗?