我有一个对话框表单,用户必须从中选择要用于绘制图形的文本文件中的哪些列。
如果有人不太明白我的意思,请查看以下示例:
我遇到的问题如下:
我想阻止用户为x和y值选择相同的列,这会导致角度大约为45度的线条,并使图形无用。
两个组合框都填充了相同的字符串数组,其中包含文本文件中列的标题。将这些字符串放入组合框中效果很好,但是:
我尝试从另一个组合框中删除在一个组合框中选择的项目,否则。 在此之前,当前选定的项目存储在变量中,项目将重置为默认状态,这意味着文本文件中的所有标题。
但是,当我以编程方式将索引设置为之前的位置,以便用户不必这样做时, SelectedIndexChanged 事件会在无限循环中触发并捕获我的代码。
public void setComboboxText()
{
cbX.Items.Clear();
cbY.Items.Clear();
cbX.Items.AddRange(cbText);
cbY.Items.AddRange(cbText);
}
void CbXSelectedIndexChanged(object sender, EventArgs e)
{
var item = cbX.SelectedItem;
setComboboxText();
cbX.SelectedItem = item;
cbY.Items.Remove(cbX.SelectedItem);
}
void CbYSelectedIndexChanged(object sender, EventArgs e)
{
var item = cbY.SelectedItem;
setComboboxText();
cbY.SelectedItem = item;
cbX.Items.Remove(cbY.SelectedItem);
}
代码执行以下操作:
任何帮助表示感谢,特别是如果有人可以告诉我是否可以通过其他活动或甚至没有活动来做我想做的事情。
提前致谢
答案 0 :(得分:0)
我认为这是你想要实现的目标。
public partial class Form1 : Form
{
List<string> source1 = new List<string>();
List<string> source2 = new List<string>();
public Form1()
{
InitializeComponent();
for (int i = 0; i < 10; i++)
{
source1.Add("item" + i);
source2.Add("item" + i);
}
comboBox1.Items.AddRange(source1.ToArray());
comboBox2.Items.AddRange(source2.ToArray());
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox2.Items.Contains(comboBox1.SelectedItem))
{
comboBox2.Items.Clear();
List<string> updatedList = new List<string>();
updatedList = (from x in source2
where !x.Equals(comboBox1.SelectedItem)
select x).ToList<string>();
comboBox2.Items.AddRange(updatedList.ToArray());
}
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.Items.Contains(comboBox2.SelectedItem))
{
comboBox1.Items.Clear();
List<string> updatedList = new List<string>();
updatedList = (from x in source1
where !x.Equals(comboBox2.SelectedItem)
select x).ToList<string>();
comboBox1.Items.AddRange(updatedList.ToArray());
}
}
}