C# 组合框已更改,清除继续操作的组合框

C# 组合框已更改,清除继续操作的组合框,c#,C#,我想在组合框更改后清除组合框 例如,如果我有组合框1、2和3,如果2已更改,则清除3的内容 我有点被这一逻辑所束缚。我应该创建一个递归方法来做这样的事情吗?或者仅仅使用“selectedindexchanged”事件?对此有任何想法都会大有裨益 我不太确定您是在使用MVVM模式,还是在使用web或桌面(winforms或wpf)应用程序,因此我不打算具体介绍技术 一种方法是实现每个textbox的textchanged事件,并处理与每个textbox关联的逻辑。如: texbox.textcha

我想在组合框更改后清除组合框

例如,如果我有组合框1、2和3,如果2已更改,则清除3的内容


我有点被这一逻辑所束缚。我应该创建一个递归方法来做这样的事情吗?或者仅仅使用“selectedindexchanged”事件?对此有任何想法都会大有裨益

我不太确定您是在使用MVVM模式,还是在使用web或桌面(winforms或wpf)应用程序,因此我不打算具体介绍技术

一种方法是实现每个textbox的textchanged事件,并处理与每个textbox关联的逻辑。如:
texbox.textchange事件已触发->因此为明文(textbox2)。

向同一事件订阅组合框

bool _ignore;

private void comboBox_SelectedIndexChanged(object sender, System.EventArgs e)
{
    // ignore event if programmatic change
    if(_ignore)
        return;

    _ignore = true;
    // instead of push/pop can be 3 if
    var index = (sender as ComboBox).SelectedIndex; // push
    comboBox1.SelectedIndex = comboBox2.SelectedIndex = comboBox3.SelectedIndex = -1;
    (sender as ComboBox).SelectedIndex = index; // pop
    _ignore = false;
}
试试这个:

    int maxNo = 4; //you can change this no and logic works till 9 comboboxes
    void clearPreceding(ComboBox cmbBox)
    {
        int cmbBoxNo = Convert.ToInt32(cmbBox.Name.Substring(cmbBox.Name.Length - 1));
        for (int i = cmbBoxNo; i <= maxNo; i++)
        {
            ((ComboBox)this.Controls.Find("comboBox" + i, true)[0]).Text = "";
        }
    }
事件处理程序是:

   private void AllCombobox_SelectedIndexChanged(object sender, EventArgs e)
    {
        clearPreceding((ComboBox)sender);
    }
完整代码:

public partial class Form1 : Form
{
    int maxNo = 4;
    public Form1()
    {
        InitializeComponent();
        comboBox1.SelectedIndexChanged+=AllCombobox_SelectedIndexChanged;
        comboBox2.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
        comboBox3.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
        comboBox4.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
    }
    private void AllCombobox_SelectedIndexChanged(object sender, EventArgs e)
    {
        clearPreceding((ComboBox)sender);
    }

    void clearPreceding(ComboBox cmbBox)
    {
        int cmbBoxNo = Convert.ToInt32(cmbBox.Name.Substring(cmbBox.Name.Length - 1));
        for (int i = cmbBoxNo; i <= maxNo; i++)
        {
            ((ComboBox)this.Controls.Find("comboBox" + i, true)[0]).Text = "";
        }
    }
}
公共部分类表单1:表单
{
int maxNo=4;
公共表格1()
{
初始化组件();
ComboBox 1.SelectedIndexChanged+=所有ComboBox\u SelectedIndexChanged;
ComboBox 2.SelectedIndexChanged+=所有ComboBox\u SelectedIndexChanged;
comboBox3.SelectedIndexChanged+=所有ComboBox\u SelectedIndexChanged;
ComboBox 4.SelectedIndexChanged+=所有ComboBox\u SelectedIndexChanged;
}
私有void AllCombobox\u SelectedIndexChanged(对象发送方,事件参数e)
{
ClearPrevious((组合框)发送方);
}
无效ClearBox(组合框cmbBox)
{
int-cmbBoxNo=Convert.ToInt32(cmbBox.Name.Substring(cmbBox.Name.Length-1));

对于(int i=cmboxno;i),不需要递归方法suffice@SudhakarTillapudi winforms@SudhakarTillapudi我在表格上有4个。@user3302467:请在下面检查我的答案
public partial class Form1 : Form
{
    int maxNo = 4;
    public Form1()
    {
        InitializeComponent();
        comboBox1.SelectedIndexChanged+=AllCombobox_SelectedIndexChanged;
        comboBox2.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
        comboBox3.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
        comboBox4.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
    }
    private void AllCombobox_SelectedIndexChanged(object sender, EventArgs e)
    {
        clearPreceding((ComboBox)sender);
    }

    void clearPreceding(ComboBox cmbBox)
    {
        int cmbBoxNo = Convert.ToInt32(cmbBox.Name.Substring(cmbBox.Name.Length - 1));
        for (int i = cmbBoxNo; i <= maxNo; i++)
        {
            ((ComboBox)this.Controls.Find("comboBox" + i, true)[0]).Text = "";
        }
    }
}