本人學習.net用戶控件的過程:如何讀取子控件的值,自定義事件,動態控制子控件的狀態,附帶例子。
關于Web用戶控件如何讀取子控件的值,自定義事件,動態控制子控件狀態的應用。
效果圖:
?
/*用戶控件界面開始*/
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SearchBar.ascx.cs" Inherits="Singcn.UC.SearchBar" %>
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="coolBar">
? <tr>
??? <td style="WIDTH: 3px; CURSOR: move; height: 26px;"><DIV CLASS="TBHandle"></DIV></TD>
??? <td style="height: 26px">
??????? 查詢:<asp:TextBox ID="search_txt" runat="server" CssClass="TextBox" Width="120px"></asp:TextBox>
??????? <asp:DropDownList ID="search_lx" runat="server">
??????? </asp:DropDownList>
??????? <asp:Button ID="BOk" runat="server" CssClass="Button" Text="查詢" OnClick="BOk_Click"/>
??????? <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></td>
? </tr>
</table>
/*用戶控件界面結束*/
?
?
/*用戶控件代碼開始*/
namespace MY.UC
{
??? using System;
??? using System.Data;
??? using System.Configuration;
??? using System.Collections;
??? using System.Web;
??? using System.Web.Security;
??? using System.Web.UI;
??? using System.Web.UI.WebControls;
??? using System.Web.UI.WebControls.WebParts;
??? using System.Web.UI.HtmlControls;
??? public delegate void BOkClickHandler(object sender, System.EventArgs e); //定義查詢按鈕委托
??? //自定義枚舉,用戶控制查詢條顯示模式
??? public enum EBarType { mintype = 1, usertype, xwxxtype };
??? //1=缺省模式,2=操作員模式,3=新聞管理模式
??? public partial class SearchBar : System.Web.UI.UserControl
??? {
??????? public event BOkClickHandler BOkClick;//定義事件
???????
??????? public string SearchTxt//設置文本框內容
??????? {
??????????? get { return this.search_txt.Text; }//this.search_txt.Text
??????????? set { this.search_txt.Text = value; }
??????? }
??????? private EBarType _BarType;
??????? public EBarType BarType//設置顯示模式
??????? {
??????????? get { return _BarType; }
??????????? set
??????????? {
??????????????? _BarType = value;
??????????????? switch (value)
??????????????? {
??????????????????? case EBarType.xwxxtype:
??????????????????????? showxwxx();
??????????????????????? break;
??????????????????? case EBarType.usertype:
??????????????????????? showuser();
??????????????????????? break;
??????????????????? default://EBarType.mintype;
??????????????????????? showmin();
??????????????????????? break;
??????????????? }
??????????? }
??????? }
???
???
??????? private bool _TxtVisible;
??????? public bool TxtVisible
??????? {
??????????? get { return _TxtVisible; }
??????????? set
??????????? {
??????????????? _TxtVisible = value;
??????????????? this.search_txt.Visible = _TxtVisible;
??????????? }
??????? }//控制文本框是否顯示
??????? private bool _LXVisible;
??????? public bool LXVisible
??????? {
??????????? get { return _LXVisible; }
??????????? set
??????????? {
??????????????? _LXVisible = value;
??????????????? this.search_lx.Visible = _LXVisible;
??????????? }
??????? }//控制下拉列表是否顯示
???????
??????? //private string _SearchLX;
??????? public string SearchLX
??????? {
??????????? get { return this.search_lx.SelectedItem.Value; }//this.search_lx.SelectedItem.Value;_SearchLX
??????????? set
??????????? {
??????????????? for (int myi = 0; myi < search_lx.Items.Count ; myi++)
??????????????? {
??????????????????? if (search_lx.Items[myi].Value == value)
??????????????????? {
??????????????????????? search_lx.SelectedIndex = myi;
??????????????????????? break;
??????????????????? }
??????????????? }
??????????? }
??????? }//設置下拉列表的值
??????? protected void Page_Load(object sender, EventArgs e)
??????? {
??????? }
??????? #region web 窗體設計器生成的代碼
??????? override protected void OnInit(EventArgs e)
??????? {
??????????? InitializeComponent();
??????????? base.OnInit(e);
??????? }
??????? private void InitializeComponent()
??????? {
??????????? this.BOk.Click += new System.EventHandler(this.BOk_Click);//這一行很重要
??????? }
??????? #endregion
??????? protected void BOk_Click(object sender, EventArgs e)
??????? {
//??????????? this._SearchTxt = this.search_txt.Text;
??????????? //this._SearchLX = this.search_lx.SelectedItem.Value;
??????????? if (BOkClick != null)
??????????????? BOkClick(this, e);
??????? }
??????? private void showxwxx()//新聞管理模式的界面處理
??????? {
??????????? Label1.Visible = false;
??????????? search_txt.Visible = true;
??????????? search_lx.Visible = true;
??????????? search_lx.Items.Clear();
??????????? ListItem myitem = new ListItem();
??????????? myitem.Text = "標題";
??????????? myitem.Value = "1";
??????????? search_lx.Items.Add(myitem);
??????????? myitem = new ListItem();
??????????? myitem.Text = "作者";
??????????? myitem.Value = "2";
??????????? search_lx.Items.Add(myitem);
??????????? search_lx.SelectedIndex = 0;
???????
??????? }
??????? private void showuser()//操作員模式的界面處理
??????? {
??????????? Label1.Visible = false;
??????????? search_txt.Visible = true;
??????????? search_lx.Visible = true;
??????????? search_lx.Items.Clear();
??????????? ListItem myitem = new ListItem();
??????????? myitem.Text="用戶ID";
??????????? myitem.Value="1";
??????????? search_lx.Items.Add(myitem);
??????????? myitem = new ListItem();
??????????? myitem.Text = "用戶名稱";
??????????? myitem.Value = "2";
??????????? search_lx.Items.Add(myitem);
??????????? search_lx.SelectedIndex = 0;
??????? }
??????? private void showmin()//缺省模式的界面處理
??????? {
??????????? Label1.Visible = true;
??????????? search_txt.Visible = true;
??????????? search_lx.Visible = false;
??????????? search_lx.Items.Clear();
??????? }
??? }
}
/*用戶控件代碼結束*/
/*測試頁界面開始*/
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SearchBarTest.aspx.cs" Inherits="Control_SearchBarTest" %>
<%@ Register Src="SearchBar.ascx" TagName="SearchBar" TagPrefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
??? <title>無標題頁</title>
??? <link href="../CSS/system.css" _fcksavedurl=""../CSS/system.css"" _fcksavedurl=""../CSS/system.css"" _fcksavedurl=""../CSS/system.css"" rel="stylesheet" type="text/css" />
???
??? <link href="../CSS/searchbar.css" rel="stylesheet" type="text/css" />???
</head>
<body>
??? <form id="form1" runat="server">
??? <div>
??????? <uc1:SearchBar ID="SearchBar1" runat="server" BarType="usertype" />
??????? <asp:Label ID="Label1" runat="server" Text="查詢結果"></asp:Label><br />
??????? <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="缺省" />
??????? <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="操作員界面" />
??????? <asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="新聞管理界面" />
??????? <asp:Button ID="Button4" runat="server" OnClick="Button4_Click" Text="隱藏下拉框" /></div>
??????? <br />
??? </form>
</body>
</html>
/*測試頁界面結束*/
/*測試頁代碼開始*/
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MY.UC;
public partial class Control_SearchBarTest : System.Web.UI.Page
{
??? protected void Page_Load(object sender, EventArgs e)
??? {
??? }
??? #region web 窗體設計器生成的代碼
??? override protected void OnInit(EventArgs e)
??? {
??????? InitializeComponent();
??????? base.OnInit(e);
??? }
??? private void InitializeComponent()
??? {
??????? //注冊查詢條的按鈕事件
??????? this.SearchBar1.BOkClick += new BOkClickHandler(this.SearchBar1_BOkClick);
??? }
??? #endregion
??? protected void SearchBar1_BOkClick(object sender, EventArgs e)
??? {
??????? //查詢按鈕事件
??????? Label1.Text = "查詢內容:"+this.SearchBar1.SearchTxt +"? 選擇列表:"+ this.SearchBar1.SearchLX;
??? }
??? protected void Button1_Click(object sender, EventArgs e)
??? {
??????? this.SearchBar1.BarType = EBarType.mintype;
??? }
??? protected void Button2_Click(object sender, EventArgs e)
??? {
??????? this.SearchBar1.BarType = EBarType.usertype;
??? }
??? protected void Button3_Click(object sender, EventArgs e)
??? {
??????? this.SearchBar1.BarType = EBarType.xwxxtype;
??? }
??? protected void Button4_Click(object sender, EventArgs e)
??? {
??????? this.SearchBar1.LXVisible = false;
??? }
}
/*測試頁代碼結束*/