Web User Controls之间的通讯

delegate,Interface,Web User Controls之间的通讯

C#中的delegate及在Web开发中的应用(Web User Controls之间的通讯):

delegate是什么?委托?托管?代理?如果你学习过C/C++,也许你更愿意把delegate理解成“函数指针”(想起了N年前学习的潭浩强先生的C语言程序设计这本经典的教程)。

delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。它所实现的功能与C/C++中的函数指针十分相似。它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。

通过以下三个步骤可以实现一个delegate:
1. 定义一个delegate对象,
2. 创建一个delegate对象的实例,
3. 使用创建的实例调用方法。

在Web开发中使用delegate:
.NET Web开发中经常会有这种情况,一个 Web Page 有一个或多个 User Control,当一个User Control里的信息发生变化后,其他的 User Control 或者 Web Page 里的控件或信息需要同步更新。这时需要用到delegate来实现这个同步更新的功能。

例子:
在一个Web Page(Default.aspx)上有一个Lable控件和两个User Control:
        <asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label><br />
        <uc1:UserControlOne id="UserControlOne1" runat="server">
        </uc1:UserControlOne><br />
        <uc2:UserControlTwo id="UserControlTwo1" runat="server">
        </uc2:UserControlTwo></div>

第一个User Control(UserControlOne)中有一个Lable控件:
<asp:Label ID="lblMessage" runat="server" Text="Label"></asp:Label>

第二个User Control(UserControlTwo)中有一个Textbox和一个Button
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="btnHello" runat="server"  Text="Hello" />

当用户点击UserControlTwo里的Button后,我们希望将UserControlTwo里的TextBox1里的内容显示在UserControlOne和Default.aspx的Lable控件的地方。

首先我们写一个自定义的事件参数类:
    public class UserControlEventArgs : EventArgs
    {
        private string _message;
        public string message
        {
            get { return _message; }
        }
        public UserControlEventArgs(string message)
        {
            this._message = message;
        }
    }

然后在Default.aspx中加入以下函数:
        public void OnUserControlEvent(object sender, UserControlEventArgs e)
        {
            lblMessage.Text = "Main Page: " + e.message;
        }
在UserControlOne中加入以下函数:
        public void OnUserControlEvent(object sender, UserControlEventArgs e)
        {
            lblMessage.Text = "User Control 1: " + e.message;
        }
这两个函数的作用就是更新Web Page 和 User Control 中的相应内容。
同时我们需要在Default.aspx中的Page_Load函数里加入几行代码:
        protected void Page_Load(object sender, EventArgs e)
        {
            //用 += 操作符添加事件到事件队列中,即给UserControlTwo中的delegate对象的实例赋值。
            UserControlTwo1.OnUserControlEvent += new UserControlTwo.UserControlEventHandler(UserControlOne1.OnUserControlEvent);
            UserControlTwo1.OnUserControlEvent += new UserControlTwo.UserControlEventHandler(OnUserControlEvent);
        }

最后在UserControlTwo中加入如下代码:
        //定义一个delegate对象类型,参数必须和Default.aspx及UserControlOne中的OnUserControlEvent函数参数相同。
        public delegate void UserControlEventHandler(Object sender, UserControlEventArgs e);
        //创建一个delegate对象的实例
        public event UserControlEventHandler OnUserControlEvent;

        protected void btnHello_Click(object sender, EventArgs e)
        {
            //如果delegate对象的实例不为null,调用delegate,触发事件
            //Default.aspx和UserControlOne中的OnUserControlEvent函数将被调用
            if (OnUserControlEvent != null)
                OnUserControlEvent(this, new UserControlEventArgs(TextBox1.Text));
        }
当然delegate的参数可以是任意类型,不一定非要用自定义的事件参数,你可以简单的使用string作为参数,但要保证delegate的参数和要调用的函数的参数是相同的。

使用Interface进行Web User Controls之间的通讯:
首先定义一个Interface
    public interface IUserControl
    {
        void SetValue(string value);
    }

然后在Web Page和User Control中继承并实现这个Interface
//Web Page
public partial class _Default : System.Web.UI.Page, IUserControl
{
        public void SetValue(string value)
        {
            lblMessage2.Text = "Main Page: " + value;
        }
}
//User Control One
public partial class UserControlOne : System.Web.UI.UserControl, IUserControl
{
        public void SetValue(string value)
        {
            lblMessage2.Text = "User Control 1: " + value;
        }
}

再看一下如何在User Control Two中调用:
        protected void btnHello_Click(object sender, EventArgs e)
        {
            if (OnUserControlEvent != null)
                OnUserControlEvent(this, new UserControlEventArgs(TextBox1.Text));
           
            //调用Web Page的SetValue函数
            IUserControl uc = (IUserControl)Page;
            uc.SetValue(TextBox1.Text);

            //调用User Control One的SetValue函数
            IUserControl uc1 = (IUserControl)Page.FindControl("UserControlOne1");
            uc1.SetValue(TextBox1.Text);
        }
==========================
以上两种方式,就是对象内部调用外部的一个方法,将数据传入到外部,然后外部再改版自已的数据
第三个方式,用Response.Redirect()
第四种方式,指定初始化的顺序,然后用中间对象.(可行性??),在page页面使用FindControl可以做到,
也可this.parent.FindControl,利用控件树来做
### 回答1: winformui.usercontrols是一个用户界面控件库,它提供了一系列可重用的控件,以帮助WinForms应用程序的设计人员快速地创建用户界面。这个库中包括了许多在WinForms中常用的控件,如按钮、文本框、标签等,还包括一些自定义的控件,如进度条、树形结构视图等。 使用winformui.usercontrols库可以提高应用程序的开发效率,减少代码量,改善用户界面的外观和体验。开发人员可以轻松地将用户界面控件添加到WinForms视图中,从而实现自己的设计目的。同时,这个库也提供了大量的样式和主题选项,可以根据具体的需求对应用程序的外观和交互风格进行定制。 总之,winformui.usercontrols是一种非常有用的WinForms开发工具,为开发人员提供了可靠、易用的控件和工具,以帮助他们更快速地创建高质量的用户界面。 ### 回答2: winformui.usercontrols是C#语言中WinForms应用程序的一个命名空间,用户控件(UserControl)是一个可在 WinForms 窗体上嵌入的重复使用的控件。用户控件是Winforms应用程序中的最基本组成部分之一,它允许用户自己创建一个组件并将其添加到窗体上。 winformui.usercontrols命名空间提供了一些预定义的用户控件,比如数据网格视图(DataGridView)、文本框(TextBox)、日期选择器(DateTimePicker)等等。同时,用户也可以自己编写和定义用户控件。 用户控件具有特定的功能和行为,用户可以在控件上添加自定义属性、方法和事件来扩展控件的功能。例如,用户可以通过添加属性和事件实现对数据网格视图的定制,来显示不同的数据源。 总体来说,winformui.usercontrols命名空间提供了广泛的用户控件和相关类,有助于开发人员快速开发和设计WinForms应用程序界面。使用用户控件可以有效提高应用程序的可重用性和可维护性,使得代码结构更加清晰和易于管理。 ### 回答3: WinForm UI User Controls是一种用于创建自定义用户界面控件的框架。它提供了一个非常灵活的方式来构建和组合多个控件,以实现更复杂的用户界面设计。 使用WinForm UI User Controls,开发人员可以轻松地创建用户界面控件,这些控件可以重复使用,并且可以在多个应用程序中使用。它们也可以通过属性窗口进行配置,而无需编写代码。 此外,WinForm UI User Controls还提供了许多可扩展的功能,例如数据绑定、事件处理和菜单管理等。这些功能使开发人员能够更轻松地创建强大的用户界面,从而提高了应用程序的质量和可靠性。 总之,WinForm UI User Controls是一种非常有用的框架,它可以帮助开发人员更轻松地创建自定义用户界面控件,并提供许多功能,使开发人员可以更轻松地构建复杂的用户界面设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值