【问题标题】:C# Delegate eventhandler SelectedIndexChangedC# 委托事件处理程序 SelectedIndexChanged
【发布时间】:2011-02-09 10:16:03
【问题描述】:

我想将另一个值传递给 LeCmb_Statut_SelectedIndexChanged 方法,我该如何继续?

我有代码:

SqlDataReader reader = comm.ExecuteReader(); 
while (reader.Read())
{
   ...
   DropDownList LeCmb_Statut = new DropDownList();
   string tempLabel = reader["LIBELLE"].ToString();
   string templabelVeh = reader["LIBVEH"].ToString()
}

如何将这些临时变量传递给LeCmb_Statut_SelectedIndexChanged

LeCmb_Statut.SelectedIndexChanged += new EventHandler(LeCmb_Statut_SelectedIndexChanged);

【问题讨论】:

  • @user609511:多描述一下你拥有什么以及你想达到什么。
  • 目前您正在为每条记录创建一个新的 DropDownList。将 Item 添加到预先存在的 DropDownList 不是更有意义吗?

标签: c# .net combobox drop-down-menu selectedindexchanged


【解决方案1】:

您可以使用下拉列表的 Tag 属性。 首先,创建一个简单的 DTO:

public class LabelDTO
{
   public string Label {get;set;}
   public string LabelVeh {get;set;}
} 

然后:

while (reader.Read())
{
   ...
   DropDownList LeCmb_Statut = new DropDownList();
   LabelDTO lbl= new LabelDTO(){Label=reader["LIBELLE"].ToString(), LabelVeh=reader["LIBVEH"].ToString()};

    LeCmb_Statut.Tag=lbl;
}

然后在 LeCmb_Statut_SelectedIndexChanged 里面:

LeCmb_Statut_SelectedIndexChanged (object sender, System.EventArgs e)
{
    LabelDTO labelDTO= ((DropDownList)sender).Tag as LabelDTO ;
    if (labelDTO!=null)
     {
        ///here you can use the label and labelVeh properties.

     }
}

【讨论】:

    【解决方案2】:

    您可以使用匿名方法来捕获它们:

    string tempLabel = reader["LIBELLE"].ToString();
    string templabelVeh = reader["LIBVEH"].ToString()
    LeCmb_Statut.SelectedIndexChanged += delegate {
        // do something fun with   tempLabel  and templabelVeh 
    };
    

    对于小块或更长的代码,这可能是内联的 - 只需传递给一个方法:

    string tempLabel = reader["LIBELLE"].ToString();
    string templabelVeh = reader["LIBVEH"].ToString()
    LeCmb_Statut.SelectedIndexChanged += delegate {
        DoSomethingFun(tempLabel,templabelVeh);
    };
    

    或者如果您需要发件人/参数:

    string tempLabel = reader["LIBELLE"].ToString();
    string templabelVeh = reader["LIBVEH"].ToString()
    LeCmb_Statut.SelectedIndexChanged += delegate(object sender, EventArgs args) {
        DoSomethingFun(sender,args,tempLabel,templabelVeh);
    };
    

    或在 C# 3.0 中:

    string tempLabel = reader["LIBELLE"].ToString();
    string templabelVeh = reader["LIBVEH"].ToString()
    LeCmb_Statut.SelectedIndexChanged += (sender, args) =>
        DoSomethingFun(sender,args,tempLabel,templabelVeh);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      相关资源
      最近更新 更多