添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

UserControl类时专门管理用户控件的类,是用户控件类的统称。用户控件就是扩展名为.ascx的Web窗体组件,与普通的服务器控件一样,其不具备单独运行的能力,必须依附于窗体页才能正常运行。通常用其来制作特殊服务器控件,或多个服务器控件的组合形式。

UserControl类以编程方式访问控件,并提供动态加载及调用等许多特性。 用户控件在运行时,被编译为UserControl对象,并驻留在服务器内存中。

语法定义:

//namespace System.Web.UI

public class UserControl : TemplateControl, IAttributeAccessor, INamingContainer, IUserControlDesignerAccessor

UserControl类的构造函数:

public UserControl();

在运行时通常不适用new关键字创建UserControl对象,而是以动态加载.ascx文件的形式创建,其加载方法如下:

UserControl myUser = (UserControl)this.LoadControl("myDropDwon.ascx");

UserControl类的属性用来在用户控件运行时获取上下文信息,下面列出这些属性及其说明

Application:Web请求的应用程序对象

Attributes:用户控件的所有属性

Cache:用户控件的缓存对象

CachePolity:用户控件的缓存参数集合

IsPostBack:是否是第一次加载用户控件

应用1:动态加载用户控件并获取其公共属性

本例主要说明动态加载用户控件,以及如何设置用户控件的公共属性。实例的用户控件是一个选择部门填充用户的复合控件,可以在项目中被多次调用。

在网站根目录下,添加一个用户控件,命名为“mydropdown.ascx”.

在用户控件内,添加两个DropDownList,属性设置如下:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="mydropdown.ascx.cs" 
Inherits="mydropdown" %>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged1">
    <asp:ListItem Value="0">技术部</asp:ListItem>
    <asp:ListItem Value="1">测试部</asp:ListItem>
    <asp:ListItem Value="2">销售部</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server"></asp:DropDownList>


为DropDownList1添加事件“SelectedIndexChanged”,代码如下:

    protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e)
        DropDownList2.Items.Clear();//首先清空
        switch (DropDownList1.SelectedValue)
            case "0":
                DropDownList2.Items.Add("刘一");
                DropDownList2.Items.Add("刘二");
                break;
            case "1":
                DropDownList2.Items.Add("王一");
                DropDownList2.Items.Add("王二");
                break;
            case "2":
                DropDownList2.Items.Add("张一");
                DropDownList2.Items.Add("张二");
                break;

添加用户控件的公共属性“SelectValue”,并在Page_Load事件中初始化其值,代码如下:

    protected void Page_Load(object sender, EventArgs e)
        SelectValue = DropDownList2.SelectedValue;
    string _value;
    public string SelectValue
        get { return _value; }
        set { _value = value; }

打开Default.aspx页,添加一个Button按钮,设置其“Text”属性为“保存”。然后添加一个运行于服务器端的“div”元素,设置其“ID”属性为“Div1”.

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
    <form id="form1" runat="server">
    <dir runat="server" id="div1">
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="保存" /></div>
    </form>
</body>
</html>

在当前页使用“Register”指令注册用户控件,代码如下:

<%@ Register Src="mydropdown.ascx" TagName="mydropdown" TagPrefix="uc1" %>

双击“保存”按钮,添加其Click事件的代码,如下:

   protected void Button1_Click(object sender, EventArgs e)
        mydropdown myuser = (mydropdown)div1.Controls[0].FindControl("user1");
            Response.Write(myuser.SelectValue);

在Page_Load事件中添加动态加载用户控件的代码,如下所示:

    protected void Page_Load(object sender, EventArgs e)
        mydropdown myuser = (mydropdown)this.LoadControl("mydropdown.ascx");
        myuser.ID = "user1";
        div1.Controls.Add(myuser);//固定动态加载的用户控件的位置


输出结果:
 


 用户控件事件的应用

既然用户控件可以有自己的属性,那也一样可以有自己的事件。给自己的控件添加一个事件有的时候往往可以解决大难题,比如我们定义了一个用户控件,里面包含了一个GridView,如下图所示,记录的右边有一个“处理”按钮,这个记录都是待办记录,处理完后会变成已处理的记录,故此时GridView的数据要重新绑定。重新绑定之后,我们希望寄存页面的TreeView控件的数据也跟着回调刷新。解决这个问题最好的办法是在用户控件中添加事件,此事件负责(触发)TreeView控件数据的刷新。

public partial class Task_Controls_uTodoTaskList : ListUC
    public event ReLoadEventHandler ReLoadTreeViewData; //定义一个事件
    protected void lbtnHandle_Click(object sender, EventArgs e)  // Add by 梁宗桥
        //进行回调绑定。
        this.DataBind();
        if (ReLoadTreeViewData != null)
            this.ReLoadTreeViewData();

在MyTask.aspx页面的Page_Load页面中,注册一个“待办任务列表控件 刷新TreeView”的事件,注册之后,此事件什么时候执行完全取决于UTodoTaskList用户控件的需要。此过程是由内到外的调用(回调),即是用户控件调用MyTask.aspx中的事件处理程序BindTaskTreeData.

UTodoTaskList.ReLoadTreeViewData += new ReLoadEventHandler(BindTaskTreeData); 
    public void BindTaskTreeData()
        if (Type.ToLower().Equals("all"))
            UTaskTree.SetNodeText("todocheck", GetTasksConnt("todocheck", UserLoginer.LoginUser.ID) + Management.GetApprovalCount("todocheck", UserLoginer.LoginUser.EmplCode) + getYYZXTodoTaskCount(UserLoginer.LoginUser.EmplCode, "todocheck"));
            UTaskTree.SetNodeText("allowcancel", GetTasksConnt("allowcancel", UserLoginer.LoginUser.ID) + Management.GetApprovalCount("allowcancel", UserLoginer.LoginUser.EmplCode) + getYYZXTodoTaskCount(UserLoginer.LoginUser.EmplCode, "allowcancel"));
            UTaskTree.SetNodeText("checked", GetTasksConnt("checked", UserLoginer.LoginUser.ID) + Management.GetApprovalCount("checked", UserLoginer.LoginUser.EmplCode) + getYYZXTodoTaskCount(UserLoginer.LoginUser.EmplCode, "checked"));
            UTaskTree.SetNodeText("todocheck", GetTasksConnt("todocheck", UserLoginer.LoginUser.ID) + getYYZXTodoTaskCount(UserLoginer.LoginUser.EmplCode, "todocheck"));
            UTaskTree.SetNodeText("allowcancel", GetTasksConnt("allowcancel", UserLoginer.LoginUser.ID) + getYYZXTodoTaskCount(UserLoginer.LoginUser.EmplCode, "allowcancel"));
            UTaskTree.SetNodeText("checked", GetTasksConnt("checked", UserLoginer.LoginUser.ID) + getYYZXTodoTaskCount(UserLoginer.LoginUser.EmplCode, "checked"));
        UTaskTree.SetNodeText("todotask", Management.GetTodoTaskCount("todotask", string.Empty, UserLoginer.LoginUser.ID));
        UTaskTree.SetNodeText("overdue", Management.GetTodoTaskCount("overdue", string.Empty, UserLoginer.LoginUser.ID));
        UTaskTree.SetNodeText("completedtask", Management.GetCompletedTaskCount(string.Empty, UserLoginer.LoginUser.ID));


意义:在用户控件中定义了事件,就间接实现对寄存页面各块功能的控制,基本可以说是指哪打哪(有需要可以定义各种事件)。

工作流用户控件对事件的使用体现就更加淋漓尽致了。

 WFButtons1.AfterCall += new WorkFlow_Control_WFButtons.AfterCallEventHandler(WFButtons1_AfterCall);
关于用户自定义控件,想必大家已经非常熟悉了。虽然说经常用过,但是只是简单的使用而已。在这里再次总结一下Asp.net中的UserControl,以便下次使用时 能够得心应手。本文将会介绍以下内容: 1,什么是UserControl? 2,如何定义一个UserControl? 3,如何使用UserControl? 4,如何通过UserControl属性来控制html? 为了提高代码的复用性,特别是页面设计代码(指Html代码)的复用性,Asp.net提供了两种定义控件的方式,一种是用户控件(User Control),一种是定制控件(Custom Control)。两者的区别很简单,用户控件似于设计好的页面,而定制控件则会生成dll,这样定制控件可以向Web Control一样出现在工具箱里通过托放拖到用户的设计页面,而用户控件必须手动在页面的Html页面添加... 为了避免将所有的控件堆在 MainForm上,导致整个视图和逻辑特别复杂,可以使用UserControl将相关的控件组合起来,独立成一个个小的视图。 比如主窗口中有多个Tab选项卡,可以将每个Tab选项卡的视图独立成一个UserControl,通过手动添加或者拖放添加到Form中。下面以PrintPanel为例说明用法(VS2015)。 首先,“添加——>新建项——>Visual C... 用户控件是许多控件的集成 自定义控件是自己写一个控件,或者继承已有的控件 复合控件是封装在公共容器内的 Windows 窗体控件的集合。这种控件有时称为“用户控件”。包含的控件称为“构成控件”。 用户控件 复合控件包含与每个包含的 Windows 窗体控件相关联的所有固有功能,允许您有选择地公开和绑定它们的属性。复合控件还提供了大量的默认键盘处理功能,您不需要任何额外的开发。 自定义控件 创建... "用户控件"继承自UserControl,而UserControl继承自ContentControl,也就是内容控件 UserControl和Window是一个层次上的,都有xaml和cs文件 创建用户控件 写好用户控件 <UserControl x:Class="WpfDemo.UserControlDemo.OwnUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta //AlertInfo案例 AlertInfo info = new AlertInfo("提示", "修改成功!"); info.Image = DevExpress.Images.ImageResourceCache.Default.GetImageById("comment", DevExpress.Utils.Design.ImageSize.Size32x32, DevExpress.Utils.Design.ImageType.Colored); alertControl1.Show(this. 分享本人对UserControl自定义控件的研究,主要针对多个控件组合为一个控件,展示控件显示风格的与众不同,我还没真正成为一位程序员,纯属业余,不过我具备了程序员一样的特点--很懒,写一些小程序供自己使用方便自己的业务,但是为了实现一个功能拖拉了多个控件到窗体中,还要对这些控件进行有序的排版(一个排版非常乱的程序自己用的都不爽),所以我想着如果能编写一个控件,把我要的这些控件都拖拉进去组合成一个控件 UserControl1 us1 = new UserControl1(); us1.Dock = DockStyle.Fill; tabPage1.Controls.Add(us1 ); 每一个用户控件就是一个,我们添加的自定义控件就是的一个对象; 在开发定制控件时,可以使用现有的控件,或者对Control或Uselcontrol进行扩展。扩展ControlUserControl开发定制控件时,这意味着需要覆盖其OnPaint()方法,自己绘制图形用户接口。作为创建定义控件的起点,ControlUserControl分别用于不同的情况。理解这两个的结构,有助于确定何时使用哪个。 1.Control https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.for...