Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据调用窗体自定义asp.net用户控件的事件处理_C#_Asp.net_User Controls - Fatal编程技术网

C# 根据调用窗体自定义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

我正在两种不同的aspx表单中使用asp.net用户控件。如何根据调用窗体自定义用户控件的事件处理

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属性。控件本身不应该对它驻留的形式感兴趣。没有道理吗?