C# 根据调用窗体自定义asp.net用户控件的事件处理
我正在两种不同的aspx表单中使用asp.net用户控件。如何根据调用窗体自定义用户控件的事件处理C# 根据调用窗体自定义asp.net用户控件的事件处理,c#,asp.net,user-controls,C#,Asp.net,User Controls,我正在两种不同的aspx表单中使用asp.net用户控件。如何根据调用窗体自定义用户控件的事件处理 void ComboboxCountry_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e) { if it is form1 that called the User-control => do process 1 if it i
void ComboboxCountry_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
if it is form1 that called the User-control => do process 1
if it is form2 that called the User-control => do process 2
}
谢谢。尽管事实上,如果这是一个好的设计,您正在尝试实现:您可以向控件添加一个属性,如
public BehaviourEnum Behaviour { get; set; } // You need to implement the enum
那你就可以
void ComboboxCountry_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
if (Behaviour == BehaviourEnum.Behave1) // etc.
}
实现控件的页面需要相应地设置Behavior属性
编辑:如果控件需要与父页面交互,我将在父页面上引入一个界面。然后你可以设计这样的东西:
// The page containing this control needs to implement IMasterpage
public IMasterpage Masterpage { get; set; }
void ComboboxCountry_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
{
// Propagate the behavour to your parent page
Masterpage.CallwatheverMethodInYourInterface();
}
目标是将依赖于父页面的行为传播到父页面本身。这样,您可以保持控件的精简和独立。您可以使用
(control)sender访问调用表单。Parent
我没有对象“sender”的属性“Parent”。也许我遗漏了什么?((控制)发送者)。家长
-我的错误,遗漏了大括号。的确。我可以检索调用表单ID以将表单标识到用户控件中吗?如果((控制)发送者).Parent.ID=“xxxx”),我在哪里可以获得ID?或者我应该使用ID以外的其他属性。您可以通过。Name property访问它。您认为这是一个糟糕的设计吗?您能否解释一下原因并提出一种更好的方法来重用用户控件,以及定制事件处理?thanksI的意思是,如果控件需要找出其父对象,那么这是一个相当糟糕的设计。依赖项应该从外部注入,而不应该依赖于外部环境。我的第一句话在我的回答中是误导性的,那样的话,我不认为这是一件坏事。另请参阅我编辑的答案。我不想调用用户控件内部的父窗体方法,我只想设置一个条件,告诉用户控件:如果是窗体1调用了您,请执行一些操作(例如,在用户控件中启用一些textfields),如果是窗体2调用=>do other(例如:保持textfields禁用)。然后我可能会选择我向您展示的第一个版本:if(behavior==behaviousenum.Behave1)//启用某些字段等。
。我不会让它依赖于父页面,它会导致不灵活。@相信者:父表单定义控件的行为方式:它相应地设置Behavior属性。控件本身不应该对它驻留的形式感兴趣。没有道理吗?