winforms 如果一个组合框已填充,则禁用其他组合框

hfwmuf9z  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(97)

我已经写了部分代码来禁用组合框。但是看看这个,它并不像是一个很好的和最佳的方式来做它(它工作,但它不觉得正确)。
我已经创建了一个组合框对象列表。

InputCheck.Add(PAR_G_P_19_M);
            InputCheck.Add(PAR_G_P_20_M);
            InputCheck.Add(PAR_G_P_21_M);
            InputCheck.Add(PAR_G_P_25_M);

字符串
并且如果所选索引发生更改,它将使用函数

foreach (ComboBox combo in InputCheck) 
            {
                combo.SelectedIndexChanged += Check;
            }


现在我的主要问题。据我目前所知,我已经写了禁用组合框这种方式。

if (PAR_G_P_19_M.SelectedIndex > 0)
            {
                PAR_G_P_19_M.Enabled = true;

                PAR_G_P_20_M.Enabled = false;
                PAR_G_P_20_A.Text = "0";
                PAR_G_P_20_A.Enabled = false;

                PAR_G_P_21_M.Enabled = false;
                PAR_G_P_21_A.Text = "0";
                PAR_G_P_21_A.Enabled = false;

                PAR_G_P_25_M.Enabled = false;
                PAR_G_P_25_A.Text = "0";
                PAR_G_P_25_A.Enabled = false;
            }
            else if (PAR_G_P_20_M.SelectedIndex > 0)
            {
                PAR_G_P_19_M.Enabled = false;
                PAR_G_P_19_A.Text = "0";
                PAR_G_P_19_A.Enabled = false;

                PAR_G_P_20_M.Enabled = true;

                PAR_G_P_21_M.Enabled = false;
                PAR_G_P_21_A.Text = "0";
                PAR_G_P_21_A.Enabled = false;

                PAR_G_P_25_M.Enabled = false;
                PAR_G_P_25_A.Text = "0";
                PAR_G_P_25_A.Enabled = false;
            }
            else if (PAR_G_P_21_M.SelectedIndex > 0)
            {
                PAR_G_P_19_M.Enabled = false;
                PAR_G_P_19_A.Text = "0";
                PAR_G_P_19_A.Enabled = false;

                PAR_G_P_20_M.Enabled = false;
                PAR_G_P_20_A.Text = "0";
                PAR_G_P_20_A.Enabled = false;

                PAR_G_P_21_M.Enabled = true;

                PAR_G_P_25_M.Enabled = false;
                PAR_G_P_25_A.Text = "0";
                PAR_G_P_25_A.Enabled = false;
            }
            else if (PAR_G_P_25_M.SelectedIndex > 0)
            {
                PAR_G_P_19_M.Enabled = false;
                PAR_G_P_19_A.Text = "0";
                PAR_G_P_19_A.Enabled = false;
                PAR_G_P_20_M.Enabled = false;
                PAR_G_P_20_A.Text = "0";
                PAR_G_P_20_A.Enabled = false;
                PAR_G_P_21_M.Enabled = false;
                PAR_G_P_21_A.Text = "0";
                PAR_G_P_21_A.Enabled = false;
                PAR_G_P_25_M.Enabled = true;
            }
            else
            {
                PAR_G_P_19_M.Enabled = true;
                PAR_G_P_19_A.Enabled = true;

                PAR_G_P_20_M.Enabled = true;
                PAR_G_P_20_A.Enabled = true;

                PAR_G_P_21_M.Enabled = true;
                PAR_G_P_21_A.Enabled = true;

                PAR_G_P_25_M.Enabled = true;
                PAR_G_P_25_A.Enabled = true;

            }


如果一个组合框在trigger selectedindexchange之后有值,则禁用rest
怎样才能把这个函数写得更好?我这样做感觉蛮强迫的。

rxztt3cl

rxztt3cl1#

让我们更好地组织控件,并通过使用元组将文本框包含在输入检查变量中。这也将允许我们在循环中处理它们。我们把它做成一个数组,因为它的大小永远不会改变。

private (ComboBox CB, TextBox TB)[] _inputCheck;

字符串
在表单构造函数中,我们初始化:

InitializeComponent();

_inputCheck = new[] {
    (PAR_G_P_19_M, PAR_G_P_19_A),
    (PAR_G_P_20_M, PAR_G_P_20_A),
    (PAR_G_P_21_M, PAR_G_P_21_A),
    (PAR_G_P_25_M, PAR_G_P_25_A)
};

foreach (var item in _inputCheck) {
    item.CB.SelectedIndexChanged += Check;
}


事件处理程序现在使用循环:

private void Check(object sender, System.EventArgs e)
{
    var currentCombo = (ComboBox)sender;
    if (currentCombo.SelectedIndex > 0) {
        foreach (var (CB, TB) in _inputCheck) {
            if (CB == currentCombo) {
                TB.Enabled = true;
            } else {
                CB.Enabled = false;
                TB.Enabled = false;
                TB.Text = "0";
            }
        }
    } else {
        foreach (var (CB, TB) in _inputCheck) {
            CB.Enabled = true;
            TB.Enabled = true;
        }
    }
}


你可以在这里阅读更多关于元组的内容

相关问题