如何根据 C# 中另一个组合框的选定值更改组合框中的项

本文关键字:组合 另一个 何根 | 更新日期: 2023-09-27 18:36:01

我再次需要你的帮助。我有两个组合框,一个叫cmbRFR,一个叫cmbSubRFR。cmbRFR 中的项目包括:

  • 定位
  • 假象
  • 患者编号
  • 曝光误差
  • 测试图像

我需要设置它,以便当用户选择 cmbRFR 中的一个项目时,它会更改 cmbSubRFR 中显示的项目。 cmbSubRFR 应按如下方式工作。

当用户选择 Null 时,组合框还应显示 Null/空白项。

当用户选择定位时:

  • 解剖学截止
  • 旋转
  • 视野受阻
  • 管材或网格定心
  • 运动

当用户选择ARTEFACT时,组合框也应显示ARTEFACT。

当用户选择患者 ID 时:

  • 不正确的患者
  • 不正确的研究/侧面
  • 用户定义的错误

当用户选择"曝光错误"时:

  • 曝光不足
  • 过度曝光
  • 暴露故障

当用户选择"测试映像"时:

  • 质量管理
  • 服务/测试

我没有为此提供代码,因为我不知道如何做到这一点。我环顾了一下与此类似的其他一些问题,但是我没有发现任何可能对我有帮助的问题。

任何建议都会有所帮助。

如何根据 C# 中另一个组合框的选定值更改组合框中的项

public partial class Form1 : Form
{
    string cmbRFR_item;
    public Form1()
    {
        InitializeComponent();
    }
    private void change_cmbSubRFR_items()
    {
        cmbSubRFR.Items.Clear();//Clear all items in cmbSubRFR comboBox.
        switch (cmbRFR_item)//Adding your new items to cmbSubRFR.
        {
            case "Null":
                cmbSubRFR.Items.Add("Null/a blank item");
                cmbSubRFR.Text = "Null/a blank item";
                break;
            case "POSITIONING":
                cmbSubRFR.Items.Add("Anatomy cut-off");
                cmbSubRFR.Items.Add("Rotation");
                cmbSubRFR.Items.Add("Obstructed view");
                cmbSubRFR.Items.Add("Tube or grid centering");
                cmbSubRFR.Items.Add("Motion");
                cmbSubRFR.Text = "";
                break;
            case "ARTEFACT":
                cmbSubRFR.Items.Add("ARTEFACT");
                cmbSubRFR.Text = "ARTEFACT";
                break;
            case "PATIENT ID":
                cmbSubRFR.Items.Add("Incorrect Patient");
                cmbSubRFR.Items.Add("Incorrect Study/Side");
                cmbSubRFR.Items.Add("User Defined Error");
                cmbSubRFR.Text = "";
                break;
            case "EXPOSURE ERROR":
                cmbSubRFR.Items.Add("Under Exposure");
                cmbSubRFR.Items.Add("Over Exposure");
                cmbSubRFR.Items.Add("Exposure Malfunction");
                cmbSubRFR.Text = "";
                break;
            case "TEST IMAGES":
                cmbSubRFR.Items.Add("Quality Control");
                cmbSubRFR.Items.Add("Service/Test");
                cmbSubRFR.Text = "";
                break;
        }
    }
    private void cmbRFR_SelectedIndexChanged(object sender, EventArgs e)
    {            
        if (cmbRFR_item!= cmbRFR.SelectedItem.ToString())//This will control your changes in cmbRFR about selected item and call change_cmbSubRFR_items()
        {
            cmbRFR_item = cmbRFR.SelectedItem.ToString();
            change_cmbSubRFR_items();
        }
    }
}

有两种方法可以解决这个问题。首先是"正确的方法",即设置 DataSource 属性。为每个组合框创建列表,如下所示:

var _positioningItems = new List<string> { "Anatomy cut-off", "Rotation", "Obstructed view" };
var _patientIdItems = new List<string> { "Incorrect Patient", "Incorrect Study/Side", "User Defined Error" };

然后订阅 cmbRFR 组合框上的 OnSelectedIndexChange 事件,然后在事件处理程序中,将数据源设置为相应的列表。

另一种方法(我不赞成)是为每个cmbRFR项创建组合框,然后将它们全部隐藏,只向用户显示适当的组合框。订阅cmbRFR组合框上的OnSelectedIndexChange事件,并隐藏/显示相应的组合框。