【问题标题】:Combo box changed, clear proceeding combo boxes组合框已更改,清除正在进行的组合框
【发布时间】:2014-02-19 22:47:09
【问题描述】:

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

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

我有点卡在这个逻辑上。我应该创建一个递归方法来做这样的事情吗?或者也许只是使用“selectedindexchanged”事件?对此的任何想法都会有很大帮助。

【问题讨论】:

  • 不需要递归方法。更改事件就足够了
  • @SudhakarTillapudi winforms
  • @SudhakarTillapudi 我的表格上有 4 个。
  • @user3302467:在下面查看我的答案

标签: c#


【解决方案1】:

我不太确定您使用的是 MVVM 模式,还是 Web 或桌面(winforms 或 wpf)应用程序,所以我将避免具体技术。

一种方法是实现每个文本框的 textchanged 事件并处理与每个文本框相关的逻辑。例如: texbox.textchange 事件已触发 -> 因此 cleartext(textbox2)。

【讨论】:

    【解决方案2】:

    为相同的事件订阅组合框

    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;
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

          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 = "";
              }
          }
      

      您可以为所有 Combobox 的 SelectedIndexChanges 事件订阅一个 EventHandler,如下所示:

              comboBox1.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
              comboBox2.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
              comboBox3.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
              comboBox4.SelectedIndexChanged += AllCombobox_SelectedIndexChanged;
      

      EventHandler 是:

         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 = "";
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 2012-09-23
        • 1970-01-01
        • 2012-08-21
        相关资源
        最近更新 更多