如何解决防止在C#格式的单独组合框中选择相同的值
| 我正在用C#构建一个表单应用程序。我有6到12个不同的组合框(根据此程序的其他特定选项而有所不同,但这并不重要),每个组合框都具有相同的6个选择。 阻止用户在多个组合框中选择同一项目的最简单方法是什么?解决方法
如果仅创建一种方法来处理组合框的SelectedIndexChanged事件,将它们全部设置为使用相同的方法,然后进行一些快速验证,例如:
private void TestUniqueSelection(object sender,System.EventArgs e)
{
var controls = new List<System.Windows.Forms.ComboBox>();
controls.Add(...); // <-- Add all of your controls here.
ComboBox changedBox = (ComboBox) sender;
if (controls
.Where(a => a != changedBox && a.SelectedItem == changedBox.SelectedItem)
.Count() > 0)
MessageBox.Show(\"Selected Option has already been chosen\");
}
显然,可以通过将List <...>作为私有成员变量并使它仅设置一次来提高效率,但是我想在示例代码中简洁明了。
, 您有2个我可以提出的选择。抢先和响应。
@Steve给出了一个快速响应的示例(对select事件进行反应以确保它不会重复)
在抢占式方法中,您调用一种方法以从表单上的所有其他组合框中删除该值,以便无法选择它。
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace SO_Forms_Demo
{
public partial class ComboBoxes : Form
{
public ComboBoxes()
{
InitializeComponent();
}
private void comboBox1_SelectedIndexChanged(object sender,EventArgs e)
{
//do whatever else you want to do here....
removeDuplicateValues((ComboBox)sender,((ComboBox)sender).SelectedItem.ToString());
}
//....Through ...//
private void comboBox6_SelectedIndexChanged(object sender,((ComboBox)sender).SelectedItem.ToString());
}
private void removeDuplicateValues(ComboBox sender,string value)
{
//get all of the comboboxes in a collection
List<ComboBox> comboboxes = this.Controls.OfType<ComboBox>().ToList<ComboBox>();
foreach (ComboBox cb in comboboxes)
{
if (cb != sender)
{
cb.Items.Remove(value);
}
}
}
}
}
一旦有了适当的位置,就有很多方法可以使它更强大(跟踪先前的值,并在进行更改后将其插入等),但这可以回答您的基本问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。