110,533
社区成员
发帖
与我相关
我的任务
分享
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;
}
}
}
}
}