用户控件及事件添加

使用IDF和VSCode构建ESP32的开发环境 本文主要介绍构建使用IDF和VS-CODE 工具构建ESP32的开发环境的详细步骤,还应用IDF和VS CODE创建ESP32的项目文件,并实现编译和下载功能。 阅读详情
在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程。它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的实现了对数据库的访问,就当时来说,这是一项多么吸引人的技术,包括现在Internet上的许多web站点都是用Asp写的,我的同事前辈们更是玩Asp的高手,经历这么多年而不衰,可见他的成功。 
         但是,技术是在不断的发展着,引用某位Net专家的话讲――如今Web编程的状态还是落后的。因此Microsoft提出了第二代编程模型――Web窗体。Web窗体模型作为Asp.net的一部分,而Asp.net又是.Net框架的一个部分。他的编程模型是基于事件的,使用他更像是在进行Windows窗体编程,这一点也正是我决定去学习使用他的一个重要原因,也胡乱看了一些这方面的书,写这篇文章的目的也就是和各位Asp.net初学者和还没有为用户控件添加过自定义事件的同行分享一下经验。 
 废话少说,下面就让我们先建立一个用户控件吧,这里就用一个简单登录用户控件来做演示。 
 先来看看用户控件的前台代码(LogInOutControl.ascx文件): 
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="LogInOutControl.ascx.cs" Inherits="ZZ.LogInOutControl" TargetSchema=" http://schemas.microsoft.com/intellisense/ie5"%> 
<TABLE id="Table1" style="FONT-SIZE: 9pt; WIDTH: 183px; HEIGHT: 125px" cellSpacing="1" 
 cellPadding="1" width="183" align="center" border="1"> 
 <TR> 
  <TD height="20"> 
   <asp:Label id="LabelUser" runat="server">用户:</asp:Label> 
   <asp:TextBox id="TextBoxUserName" Width="128px" runat="server"></asp:TextBox></TD> 
 </TR> 
 <TR> 
  <TD height="20"><FONT face="宋体"> 
    <asp:Label id="LabelPassword" runat="server">密码:</asp:Label> 
    <asp:TextBox id="TextBoxPassword" Width="128px" runat="server" TextMode="Password"></asp:TextBox></FONT></TD> 
 </TR> 
 <TR> 
  <TD align="center" height="20"><FONT face="宋体"> 
    <asp:Button id="ButtonLogIn" Width="50px" Text="登录" runat="server"></asp:Button> 
    <asp:Button id="ButtonLogOut" Width="49px" Text="注销" runat="server"></asp:Button></FONT></TD> 
 </TR> 
</TABLE> 
我们简单简单的放了两个Label,两个TextBox,两个Button以及一个Html表。 
接下去就是为LogInOutControl.ascx.cs文件添加代码了。 
首先定义一个delegate,其中LogInOutEventArgs类是从EventArgs类继承, 
public delegate void LogInOutClickHandler(object sender,LogInOutEventArgs e); 
我觉得把这个delegate放在LogInOutControl类外面更为合适。 
接下去为控件声明了LogInOutClick事件,如下: 
public event LogInOutClickHandler LogInOutClick; 
另外为了更好的使用属性,加了Language枚举, 
private Language language; 
当然外部通过public Language Lg {get;set;}属性来访问。目的就是改变或者获取当前控件的显示。 
接下去就是定义控件事件触发函数OnLogInOutClick,由按钮单击事件处理函数来完成对用户控件事件的触发。 
完整代码如下: 
namespace ZZ 
{ 
 using System; 
 using System.Data; 
 using System.Drawing; 
 using System.Web; 
 using System.Web.UI.WebControls; 
 using System.Web.UI.HtmlControls;  

 // 定义代理 
 public delegate void LogInOutClickHandler(object sender,LogInOutEventArgs e); 
 public class LogInOutControl : System.Web.UI.UserControl 
 { 
  protected System.Web.UI.WebControls.Button ButtonLogIn; 
  protected System.Web.UI.WebControls.TextBox TextBoxUserName; 
  protected System.Web.UI.WebControls.TextBox TextBoxPassword; 
  protected System.Web.UI.WebControls.Button ButtonLogOut; 
  protected System.Web.UI.WebControls.Label LabelUser; 
  protected System.Web.UI.WebControls.Label LabelPassword; 
  public event LogInOutClickHandler LogInOutClick; 
  private Language language; 
  //方法 
  public void ChangeLanguage(Language language) 
  { 
   this.Lg = language; 
  } 
  //属性 
  public Language Lg 
  { 
   set 
   { 
    if(value!=this.language) 
    { 
     if(value==Language.English) 
     { 
      this.LabelUser.Text = "User:"; 
      this.LabelPassword.Text ="Password:"; 
      this.ButtonLogIn.Text = "LogIn"; 
      this.ButtonLogOut.Text = "LogOut"; 
     } 
     else 
     { 
      this.LabelUser.Text = "用户:"; 
      this.LabelPassword.Text ="密码:"; 
      this.ButtonLogIn.Text = "登录"; 
      this.ButtonLogOut.Text = "注销"; 
     } 
    } 
   } 
  } 
  private void Page_Load(object sender, System.EventArgs e) 
  { 
   if(this.LabelUser.Text=="User:") 
     this.language = Language.English; 
    else 
     this.language = Language.Chinese; 
  } 
  private void OnLogInOutClick(object sender,LogInOutEventArgs e) 
  { 
   if(LogInOutClick!=null) 
    LogInOutClick(this,e); 
  } 
  #region Web 窗体设计器生成的代码 
  override protected void OnInit(EventArgs e) 
  { 
   InitializeComponent(); 
   base.OnInit(e); 
  } 
private void InitializeComponent() 
  { 
   this.ButtonLogIn.Click += new System.EventHandler(this.ButtonLogIn_Click); 
   this.ButtonLogOut.Click += new System.EventHandler(this.ButtonLogOut_Click); 
   this.Load += new System.EventHandler(this.Page_Load); 
  } 
  #endregion 
  private void ButtonLogIn_Click(object sender, System.EventArgs e) 
  { 
   OnLogInOutClick(this,new LogInOutEventArgs(LogInClickType.LongIn,CustomValidate(this.TextBoxUserName.Text,this.TextBoxPassword.Text))); 
  } 
  private void ButtonLogOut_Click(object sender, System.EventArgs e) 
  { 
   //注销代码省略 
   OnLogInOutClick(this,new LogInOutEventArgs(LogInClickType.LongOut,true)); 
  } 
  //验证函数 
  private bool CustomValidate(string userName,string password) 
  { 
   //验证代码省略,假设通过 
   return true; 
  } 
 } 
} 
另外一个文件定义了枚举和参数类: 
using System; 
namespace ZZ 
{ 
 public class LogInOutEventArgs : EventArgs 
 { 
  private LogInClickType type; 
  private bool result; 
   
  public LogInOutEventArgs(LogInClickType type,bool result):base() 
  { 
   this.type = type; 
   this.result = result; 
  } 
  public LogInClickType Type 
  { 
   get{return this.type;} 
  } 
  //操作结果, 
  public bool Result 
  { 
   get{return this.result;} 
  } 
 } 
 //操作类型 
 public enum LogInClickType : int 
 { 
  LongIn, 
  LongOut 
 } 
 //定义语言 
 public enum Language  
 { 
  Chinese, 
  English 
 } 
} 
接下去看看在aspx页面里面使用。 
新建一个Default.aspx页面,拖一个LogInOutControl用户控件到上面。 
<%@ Register TagPrefix="uc1" TagName="LogInOutControl" Src="LogInOutControl.ascx" %> 
<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="ZZ.Default" %> 
<%@ Import Namespace="ZZ" %> 
<HTML> 
 <HEAD> 
  <title>WebForm1</title> 
 </HEAD> 
 <body> 
  <form id="Form1" method="post" runat="server"> 
   <FONT face="宋体"> 
    <uc1:LogInOutControl id="LogInOutControl1" runat="server"> 
    </uc1:LogInOutControl> 
    <asp:Label id="LabelMsg" runat="server"></asp:Label> 
    <asp:DropDownList id="DropDownList1" runat="server" AutoPostBack="True"> 
     <asp:ListItem Value="0" Selected="True">中文</asp:ListItem> 
     <asp:ListItem Value="1">英文</asp:ListItem> 
    </asp:DropDownList></FONT> 
  </form> 
 </body> 
</HTML> 
在后台代码中添加事件和属性。 
虽然在前台添加了LogInOutControl1,但是后台代码中不会生成protected LogInOutControl LogInOutControl1;这条语句,我觉得很奇怪,不管先加上他。 
接着在Page_Load事件中注册LogInOutClick事件: 
this.LogInOutControl1.LogInOutClick += new LogInOutClickHandler(LogInOutControl1_LogInOutClick); 

完整代码如下: 
using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Web; 
using System.Web.SessionState; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.HtmlControls; 

namespace ZZ 
{ 
 public class Default : System.Web.UI.Page 
 { 
  protected System.Web.UI.WebControls.Label LabelMsg; 
  protected System.Web.UI.WebControls.DropDownList DropDownList1; 
  protected LogInOutControl LogInOutControl1; 
  private void Page_Load(object sender, System.EventArgs e) 
  { 
   //注册用户控件事件 
   this.LogInOutControl1.LogInOutClick += new LogInOutClickHandler(LogInOutControl1_LogInOutClick); 
  } 
  #region Web 窗体设计器生成的代码 
  override protected void OnInit(EventArgs e) 
  { 
   InitializeComponent(); 
   base.OnInit(e); 
  } 
  private void InitializeComponent() 
  {     
   this.DropDownList1.SelectedIndexChanged += new System.EventHandler(this.DropDownList1_SelectedIndexChanged); 
   this.Load += new System.EventHandler(this.Page_Load); 
  } 
  #endregion 
  private void LogInOutControl1_LogInOutClick(object sender, LogInOutEventArgs e) 
  { 
   switch(e.Type) 
   { 
    case LogInClickType.LongIn: 
     this.LabelMsg.Text = "你点击了登录按钮,操作结果:"+e.Result.ToString(); 
     break; 
    case LogInClickType.LongOut: 
     this.LabelMsg.Text = "你点击了注销按钮,操作结果:"+e.Result.ToString(); 
     break; 
   } 
  } 
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e) 
  { 
   this.LogInOutControl1.Lg = (Language)this.DropDownList1.SelectedIndex; 
   //this.LogInOutControl1.ChangeLanguage((Language)this.DropDownList1.SelectedIndex); 
  } 
 } 
} 
当用户在前台通过选择下拉框列表来改变控件的语言,这里通过Lg属性来完成,不过这里也加了一个方法ChangeLanguage也可以实现同样的功能。另外,通过点击登陆或注销按钮触发LogInOutClick事件来给页面中的LabelMsg.Text属性赋值从而得到操作结果。 
       总结,用户控件为程序员带来了很高的开发效率和重用性,更是在性能方面有了很大的提高,以前称为Asp+,其实我认为Asp.net跟Asp没有什么直接联系。而且我想做应用程序的朋友和我一样在开发Web程序时更喜欢采用代码分离方式,这样结构更清晰,便与修改和管理。同Asp程序相比,他是编译型的,引入了面向对象的设计思想,也就不可避免的带来了他的复杂性,要想开发高水准的Asp.net程序,对于模式的设计,层次结构的划分,这里还是比较讲究的。总之,他更像是在编Windows窗体程序,而不是在写VB脚本。
【GEOS-Chem模拟教程第二期下】全球生物质燃烧 GFAS 数据配置 本博客详细介绍全球生物质燃烧 GFAS 数据下载及在 GEOS-CHEM 模型中的配置 阅读详情

相关推荐

【数字人实战】Windows系统下Fun-CosyVoice3-0.5B-2512本地部署的避坑指南与疑难解析

本文详细介绍了在Windows系统下本地部署Fun-CosyVoice3-0.5B-2512的避坑指南与疑难解析,包括Python环境准备、源码获取、依赖安装、模型下载与WebUI启动等关键步骤。特别针对Windows环境下的常见问题提供了实用解决方案,帮助开发者高效完成部署并充分利用其语音转换与多语言支持功能。

weixin_42521856的博客 375

为用户控件 User Control添加事件(转)

原文地址:http://www.cnblogs.com/AXzhz/archive/2007/11/02/947011.html 【引】项目中用了许多UC(User Control),其中有些主页需要知道UC做了某个Event后,进行联动动作.例如:如果UC的Button控件被Click,那么主页(Page)要做一个显示不同信息的动作.因为主页(Page)不能直接知道UC里Button被C...

weixin_30600503的博客 492

告别ROS1思维:在ROS2 Humble上,用Python搞定MoveIt2机械臂控制的完整流程

本文详细介绍了在ROS2 Humble环境下使用Python控制MoveIt2机械臂的完整流程。从环境配置、架构变革到实战操作,涵盖URDF适配、Action接口编程及性能优化技巧,帮助开发者高效迁移ROS1项目至ROS2平台,实现工业级机械臂控制。

weixin_30352645的博客 449

C#用户控件usercontrol中的子控件事件及属性的传递

C#中我们往往需要使用到用户控件usercontrol,使用用户控件的一个很典型的问题就是在主窗体中如何将事件和属性值传递到用户控件中的子控件事件及属性中去,这里我们介绍的就是实现他们的方法。

河西~石头 2428

51单片机AHT20-21源代码

传感器输出经过 标定的数字信号,标准 I 2 C 格式。AHT20 配有一个全新设计的 ASIC专用芯片、一 个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其 性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器, 经过改进使其在恶劣环境下的性能更稳定。但是现在网上的大多数原码都是针对stm32等的这种多位单片机,而我们都知道51单片机是8位单片机,无法对浮点数进行运算,对32位的整数计算有时候也不是很准确,所以我对网上stm32的例程进行了修改。...

wd0710的博客 4549

帆软js--获取控件和单元格

参数面板: 获取面板控件 ,name为控件名称:_g().parameterEl.getWidgetByName("name") 取值:_g().parameterEl.getWidgetByName("tt3").getValue()2323 赋值:_g().parameterEl.getWidgetByName("tt2").setValue("987") 调用对应的事件比...

江湖行骗老中医 7197

用户控件触发事件

假定用户控件(UserControl.ascx)中包含按钮控件AButton,希望实现按AButton按钮时,包含该用户控件的页面可以接收到事件。为此,在用户控件和页面的代码中分别作了处理。 UserControl.ascx.cs中的处理: 1. 定义public的事件委托,如ClickEventHandler;2. 在UserControl类中声明事件,如Click;3. 在UserC...

weixin_30797027的博客 236

【Java微服务-医疗管理项目】(附源码+资料+教程)

尚医疗是专门为各大医院、门诊提供的一款医疗管理平台。 系统包含:系统管理、药品进销存管理、看病就诊、收费管理、检查管理、数据统计等核心模块。 通过尚医疗系统可以快速、方便的管理病人从挂号到门诊结束所涉及到的全套流程。也可以清晰明了的体现出药品进货、出售的所有记录。.........

m0_72882572的博客 2203

用户控件增加事件

public partial class CaiControl : UserControl    {        ///         /// 用户控件单击事件        ///         //public event EventHandler OnClickUserControl;        private string _barcode;        ///      

Michael的专栏 714

嵌入式调光控制库:轻量级软启/渐变/记忆逻辑实现

调光控制是智能照明系统的核心基础功能,涉及亮度调节、人机交互与电气安全多重需求。其底层原理依赖于对相位角或PWM占空比的精确时序控制,并需融合软启动、渐变过渡、状态记忆等工程化逻辑。这类轻量级调光行为逻辑层,不直接操作硬件寄存器,而是以确定性、无动态内存、可配置的方式封装用户意图到目标亮度值(0–100%)的映射过程,显著提升产品鲁棒性与跨平台复用能力。广泛应用于TRIAC交流调光、LED直流PWM驱动及DALI/Matter等智能照明协议网关中,尤其适合资源受限的Cortex-M系列MCU和FreeRTO

weixin_28949937的博客 579

[密码学实战]密评考试训练系统v1.0程序及密评参考题库(获取路径在文末)(二十四)

本系统将密码学理论与软件工程实践相结合,为密评备考提供了高效解决方案。随着《密码法》的深入实施,掌握密评知识将成为信息安全从业者的核心竞争力。立即开始您的密码安全专家之旅!(注:实际应用请以最新发布版本为准)

曼岛_的博客 797

给用户控件添加事件

UserControl.ascx.cs中的处理: 1. 定义public的事件委托,如ClickEventHandler; 2. 在UserControl类中声明事件,如Click; 3. 在UserControl类中定义引发事件的方法,如OnClick()方法; 4. 在UserControl类的相关方法中调用引发事件的方法,如在Button_Click()中调用OnClick()。 核心代码示

华少.Net 3396

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

[ASP.NET开发系列]在用户控件中添加事件

在《在用户控件中添加属性》这一篇文章中我们演示了如何在用户控件中添加属性,接下来我们演示如何在用户控件中添加事件。在《在用户控件中添加属性》这一篇文章中我们定义了一个用户登录的用户控件UserLogin.ascx 文件,里面包含了一个LinkButton服务器按钮控件,当用户单击该按钮时服务器端会自动生成一个回发来激发Page.Load事件。除了服务器自动产生回发来激发Page.Load事件外,我

嗨!您好!Welcome my blog 887

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C# 中用户控件中添加事件和使用

事件 用户控件 c#中用户控件 用户控件添加事件 自定义事件的使用 此处以TreeView用户控件为例:基本思路:1. 在SunSoftTree类中声明事件,如SelectedNodeChanged; 2. 在SunSoftTree类中定义引发事件的方法,如Sun_SelectedNodeChanged()方法; 3 在SunSoftTree类的相关方法中调用引发事件的方法,如在OnSelecte

LuTH 3628

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

在用户控件中动态添加控件及事件

问题来自网上:   动态添加控件,应该加在OnInit(EventArgs e)事件里。  protected override void OnInit(EventArgs e)    {       //加在这个事件内    }   下面Insus.NET就以动态添加一个TextBox在用户控件内,在控件值发生变化时,触发事件,并提示变化后的值。 &lt;%@ Contr...

weixin_33895475的博客 135

ASP.NET用户控件说明和添加事件

在WEB开发中经常有一些代码是在很多地方重复出现的,象导航栏、用户登录/注册和首页上面的一些固定栏目等。这些可重用的代码我们可以把它写成一个通用模块供需要的地方来引用,这样做即节省了开发时间还方便以后的维护。在ASP.NET的web编程中提供了一种叫做“用户控件”可以帮助我们完成这种做法,其文件扩展名是“.ascx”,由于ascx文件是用来插入ASPX页面中使用的,而一个ASPX窗体只能包含一

C#,SQL,Castle,Hibernate,MVC,Spring.net 847

用户控件里添加事件 画面调用

给用户控件里添加事件,画面使用  public delegate void GridRowColChanged(object sender, EventArgs e);         public event GridRowColChanged gridRowColChanged = delegate { };         protected virtual void OnGridRow

u010124796的专栏 576

在asp.net中为Web用户控件添加属性和事件

在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程。它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的实现了对数据库的访问,就当时来说,这是一项多么吸引人的技术,包括现在Internet上的许多web站点都是用Asp写的,我的同事前辈们更是玩Asp的高手,经历这么多年而不衰,可见他的成功。...

aome1470的博客 163

为asp.net中的Web用户控件添加属性和事件

在90年代初,Microsoft为Web程序员提供的 Active Server Pages(ASP)革命性地改变了Web的编程。它可以利用十分易用的模型在Web服务器上动态生成HTML,并且很容易的实现了对数据库的访问,就当时来说,这是一项多么吸引人的技术,包括现在Internet上的许多web站点都是用Asp写的。随着技术发展,Microsoft提出了第二代编程模型――Web窗体。

5138

用户控件说明和添加事件

在WEB开发中经常有一些代码是在很多地方重复出现的,象导航栏、用户登录/注册和首页上面的一些固定栏目等。这些可重用的代码我们可以把它写成一个通用模块供需要的地方来引用,这样做即节省了开发时间还方便以后的维护。 在ASP.NET的web编程中提供了一种叫做“用户控件”可以帮助我们完成这种做法,其文件扩展名是“.ascx”,由于ascx文件是用来插入ASPX页面中使用的,而一个ASPX窗体只能包含一

泪光无悔 647

用户控件添加自定义事件

用户控件添加自定义事件给用户控件添加自定义事件需要一下几个步骤:1.定义委托2.声明事件3.定义事件触发函数4.注册事件 定义委托:public delegate void LogInOutClickHandler(objectsender,LogInOutEventArgs e);其中LogInOutEventArgs类是从EventArgs类继承(把这个

tuolingss的专栏 1187

用户控件UserControl添加Load加载事件

1.在用户控件代码页面中添加Load加载方法(事件),如下图所示: 代码: //用户控件自定义加载事件private void ColorGrupMapManagerUC_Load(object sender, EventArgs e) { LoadCatalogMainItems(); this.toolStrip1.Enabled = ColorThem...

weixin_30752377的博客 1059

ASP.NET开发:在用户控件中添加事件

 在《ASP.NET开发:在用户控件中添加属性》这一篇文章中我们定义了一个用户登录的用户控件UserLogin.ascx 文件,里面包含了一个LinkButton服务器按钮控件,当用户单击该按钮时服务器端会自动生成一个回发来激发Page.Load事件。除了服务器自动产生回发来激发Page.Load事件外,我们可以给LinkButton添加一个它自己的事件,添加事件其实也很简单,通过在块中声明事件,

lihaiyin的专栏 596
上一篇: web打印
下一篇: cookie
Awinye
博客等级 码龄22年 13粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值