【问题标题】:SelectedIndexChanged not recognizing dynamic comboBoxSelectedIndexChanged 无法识别动态组合框
【发布时间】:2015-02-15 05:18:51
【问题描述】:

我正在制作一个在运行时创建 ComboBox 的表单。基于该 ComboBox 的选择,我想创建另一个适当处理用户选择的控件。在这种情况下,它是源类型的下拉列表。 在 Main.Designer.cs 我有:

public System.Windows.Forms.ComboBox cboSourceTypes;

在 Main.cs 我有:

namespace DataVerification
{
public partial class Main : Form
{
    public Main()
    {
        InitializeComponent();
        Iinitialize_MyForm();

    }
    public void initialize_MyForm()
    {
        ComboBox cboSourceType = new ComboBox();
        cboSourceType.Items.Add("ODBC");
        cboSourceType.Items.Add("CSV");
        cboSourceType.SelectedIndex = 0;
        tabMyFrom.TabPages[0].Controls.Add(cboSourceType);
        cboSourceType.SelectedIndexChanged += new System.EventHandler(cboSourceType_SelectedIndexChanged);           
    }

    public void cboSourceType_SelectedIndexChanged(object sender, EventArgs e)
    {           
        switch (cboSourceType.SelectedIndex)
        {
            case 1:  //ODBC - Handle this selection
                break;
            case 2:  //CSV - Handle this selection
                break;
        }
    }
}
}

当我尝试从cboSourceType_SelectedIndexChanged 内部访问cboSourceType 时,似乎无法访问ComboBox,即使代码看起来与另一个非动态创建的项目中的代码相同。如何让cboSourceType_SelectedIndexChanged 识别ComboBox?

【问题讨论】:

    标签: c# combobox


    【解决方案1】:

    您尝试在cboSourceType_SelectedIndexChanged() 方法中使用的cboSourceType 变量是initialize_MyForm() 方法的本地变量,因此它超出了范围。

    要获得对ComboBox 的可用引用,您应该将方法的sender 参数转换为ComboBox:

    var cboSourceType = (ComboBox)sender;
    

    一旦你这样做了,你应该有一个对触发事件的ComboBox的引用。

    【讨论】:

      【解决方案2】:

      问题在于您的 ComboBox cboSourceType 的范围。

      解释:

      public void initialize_MyForm()
          {
              ComboBox cboSourceType = new ComboBox(); // Where you define it
              cboSourceType.Items.Add("ODBC");
              cboSourceType.Items.Add("CSV");
              cboSourceType.SelectedIndex = 0;
              tabMyFrom.TabPages[0].Controls.Add(cboSourceType);
              cboSourceType.SelectedIndexChanged += new System.EventHandler(cboSourceType_SelectedIndexChanged);           
          }
      
          public void cboSourceType_SelectedIndexChanged(object sender, EventArgs e)
          {           
              // Try to access it from here : out of the scope 
              switch (cboSourceType.SelectedIndex)
              {
                  case 1:  //ODBC - Handle this selection
                      break;
                  case 2:  //CSV - Handle this selection
                      break;
              }
          }
      

      解决方案:

      从发送方获取所需的组合框元素,如下所示

          public void cboSourceType_SelectedIndexChanged(object sender, EventArgs e)
          {           
              switch ((ComboBox)sender.SelectedIndex)
              {
                  case 1:  //ODBC - Handle this selection
                      break;
                  case 2:  //CSV - Handle this selection
                      break;
              }
          }
      

      有关事件处理的更多信息,请参阅this

      【讨论】:

        猜你喜欢
        • 2011-09-02
        • 1970-01-01
        • 2012-09-06
        • 2018-11-22
        • 1970-01-01
        • 1970-01-01
        • 2010-12-22
        • 2018-03-08
        • 2019-08-29
        相关资源
        最近更新 更多