有两个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中可选项的移除和恢复的问题,哎,想了多久了,搞不懂。在校大学生一枚,各位前辈不要太不屑啊...谢谢啦

解决方案 »

  1.   

    combox是接受数组录入的,你搞两个数组,数组里输入1,2,3,4,然后当选择某一个combox的值时,判断选得是那个,然后把另外一个combox的数据源数组,剔除掉选中的数字,在录入一遍,就是这时候另外一个combox数据源数组里只有3个值,而不是4个,不懂再问
      

  2.   

    写了个示例 看看吧 你说的移除项再恢复恐怕实现起来挺困难的 看看我的方法
    窗体上加两个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;
                    }
                }
            }    }
    }
    顺便画了张图 方便理解 看不清的话  点我
      

  3.   


    移除我能实现,但是就是不能恢复。
    朋友,您的代码每次都会重置其他combobox的值的哇...
      

  4.   

    重置有什么关系么? 达到你想要的效果了啊
    你移除之后你的ComboBox里面的选项就改变了 再去比较的话就不对了 无论换哪边选择 你始终是要和1,2,3,4去比较的
      

  5.   

    重置就重新从数据库读取一遍
    觉得你这需求用combobox还不如用textbox+click事件
      

  6.   


    之前的combobox选中的项会被清除的,那之前选中一个项不是等于白选了吗?