我正在尝试在自定义控件上生成一个方法,该控件将使用与控件相关的元数据创建的对象,并在此一个方法中创建控件并添加到页面控件集合中。下面是我创建的包含控件元数据的对象。
public class ListControlSetup
{
public ListControl ListControl { get; set; }
public String ControlId { get; set; }
public String ControlCssClass { get; set; }
public bool CausesValidation { get; set; }
public IuIDropDownDictionary DropDownDictionary { get; set; }
public String DropDownMethod { get; set; }
public bool AutoPostback { get; set; }
}
然后我有一个方法将上述对象作为参数并创建控件。让我们说这个例子中的下拉列表。让我们说我想为下拉列表OnSelectedIndexchange事件传递一个事件。我将如何以通用方式执行此操作,以便可以在调用的过程中连接事件。以下是我目前拥有的被叫程序。
private void ControlSetUp(ListControlSetup control)
{
control.ListControl = this.CreateDropDownListControl(control.ControlId, control.ControlCssClass, control.CausesValidation);
_myManager.DropDownMethod = control.DropDownMethod;
_myManager.FillDropDown(control.DropDownDictionary, control.ListControl);
this.Controls.Add(control.ListControl);
}
下面是调用和对象实例化。
ListControlSetup lcs = new ListControlSetup{ ListControl = ddlControl, DropDownMethod = SPConsts.GetData,
DropDownDictionary = new DataDictionary(), ControlId="ddlControlId", ControlCssClass="inputfield", CausesValidation=false, AutoPostback=false};
ControlSetUp(lcs);
关于如何向ControlSetUp方法添加事件,任何建议都会很棒。
谢谢
答案 0 :(得分:0)
您的问题的解决方案是代表。 DropDownList.OnSelectedIndexChanged
事件是使用类型EventHandler
的委托声明的(它本身在System.dll中声明)。因此,为EventHandler
类添加相同ListControlSetup
类型的方法,如下所示:
public class ListControlSetup
{
...
EventHandler OnSelectedIndexChanged;
// Don't let the stackoverflow coloring fool you,
// 'OnSelectedIndexChanged' is a member variable name.
}
然后,在您的ControlSetUp()
方法中,执行以下操作:
if ( control.OnSelectedIndexChanged != null )
ddlControl.SelectedIndexChanged += control.OnSelectedIndexChanged;
最后,要分配ListControlSetup的OnSelectedIndexChanged列表成员,请执行以下操作:
ListControlSetup lcs = new ListControlSetup() { ... };
lcs.OnSelectedIndexChanged += new EventHandler( ddl_SelectedIndexChanged );
这假设您的事件处理程序方法当然是ddl_SelectedIndexChanged。
希望这有帮助!