当前位置:文档之家› C#给自定义Web控件添加事件的几种方法

C#给自定义Web控件添加事件的几种方法

C#给自定义Web控件添加事件的几种方法
C#给自定义Web控件添加事件的几种方法

C#给自定义Web控件添加事件的几种方法

前两种方法可以不实现IPostBackEventHandler

最近升级分页控件,由于原来使用的是https://www.doczj.com/doc/b38102051.html,(在https://www.doczj.com/doc/b38102051.html,里面添加一个事件是比较容易的),现在想改用C#,而原来的方法又写得比较笨拙,想换一个更简洁一点的方法,所以不得不重新认识一下事件。看了几遍《道不远人深入解析https://www.doczj.com/doc/b38102051.html,2.0控件开发》居然没有看懂,可能是自己太笨了吧。又找到了自定义分页控件开发看了几遍,还是比较迷糊,最后把《自定义分页控件开发》里提供的代码down下来看了一下,终于有点明白了。

先举一个简单的例子吧,我们建立一个复合控件,在CreateChildControls()里面添加两个控件,一个是Label,一个是LinkButton。我们的目的是要给自定义控件加一个事件,以便可以控制Label的Text属性。

1、内部事件。

这个好像是我起的名称,就是只在自定义控件的内部相应的事件,使用控件的页面不用相应相关的事件。具体一点就是要在自定义控件内部,在单击LinkButton的时候修改Label 的值。

public class EventTest : WebControl, INamingContainer

{

protected override void CreateChildControls()

{

Label lbl = new Label();

lbl.ID = "lbl";

this.Controls.Add(lbl);

this.Controls.Add(new LiteralControl("
"));

LinkButton btn = new LinkButton();

btn.ID = "btn";

btn.Text = "复合控件的事件测试";

this.Controls.Add(btn);

}

}

编写好这段代码,然后把控件拖拽到页面里面里进行测试,运行后点击LinkButton,我们可以看到页面已经提交了,但是什么变化也没有,恩,我们还没有些事件呢。现在我们就给LinkButton加一个Click的事件。

protected override void CreateChildControls()

{

Label lbl = new Label();

lbl.ID = "lbl";

this.Controls.Add(lbl);

this.Controls.Add(new LiteralControl("
"));

LinkButton btn = new LinkButton();

btn.ID = "btn";

btn.Text = "复合控件的事件测试";

this.Controls.Add(btn);

//给按钮添加内部事件

btn.Click += new EventHandler(btn_Click);

}

void btn_Click(object sender, EventArgs e)

{

Label lbl = (Label)this.FindControl("lbl");

lbl.Text += "控件内部的事件,hi";

}

再次运行网页,单击,我们看到了想要的效果。

怎么样简单吧,但是这种方法很不灵活,如果调用控件的网页也想相应事件怎么办呢?

2、外部事件。

这回我们要让自定义控件的外部也能相应事件。这个理论上我们要使用委托,也就是delegate,但是系统已经为我们定义好了一个(EventHandler),我们先用现成的。

这样我们就给自定义控件定义了一个事件,重新编译,我们可以在控件的属性里面看到这个事件。(如果您没有看到,说明没有刷新,可能需要把IDE关闭,再次打开)。

public event EventHandler myClick

{

add {

Events.AddHandler(this, value);

}

remove {

Events.RemoveHandler(this, value);

}

}

我们可以添加外部的响应事件了,双击,我们加上几行代码。

在使用控件的网页里填写的代码

protected void EventTest1_myClick(object sender, EventArgs e)

{

Label lbl = (Label)EventTest1.FindControl("lbl");

lbl.Text += "外部的事件,Hello" ;

}

运行,奇怪还是原来的样子,外部事件并没有相应,不是加了一个事件吗?外面的事件怎么没有被调用呢?这是因为,事件先触发自定义控件内部的事件,然后再由控件内部发出“命令”,调用外部的事件,那么我们怎样才能发出这个命令呢?我们需要要添加这个函数。这个也是最让我费解的地方,可能是对委托不是很了解的原因吧。

protected void TestClick(object sender,EventArgs e)

{

EventHandler hd = (EventHandler)base.Events[this];

if (hd != null)

{

hd(sender, e);

}

}

在修改一下btn_Click() 就可以了。

void btn_Click(object sender, EventArgs e)

{

Label lbl = (Label)this.FindControl("lbl");

lbl.Text += "控件内部的事件,hi";

//调用外部事件

TestClick(sender, e);

}

再次运行,OK。

(实现了内部和外部的事件相应,但是这时候我们还没有实现传说中的接口,这是为什么呢?)

3、“借用”事件,没有成功。

我们再给自定义控件加上几个标签,让也可以提交表单(就是触发事件),填写如下代码。

protected override void CreateChildControls()

{

//省略。。。

this.Controls.Add(new LiteralControl("
aa"));

}

运行OK。然后我们修改一下:__doPostBack的第二个参数,

aa")

奇怪,再次运行的时候出现了异常,看来不让这么做呀。

依赖别人是不行了,必须要实现自定义控件自己的事件了。我们请来IPostBackEventHandler 帮忙。同时的href修改成

this.Controls.Add(new LiteralControl("
[1]"));

this.Controls.Add(new LiteralControl(" [2]"));

this.Controls.Add(new LiteralControl(" [3]"));

this.Controls.Add(new LiteralControl(" [4]"));

在实现RaisePostBackEvent 函数

public void RaisePostBackEvent(string Index)

{

Label lbl = (Label)this.FindControl("lbl");

lbl.Text += "自己的事件:" + Index;

}

再次运行,OK。同时我们也得到了传递过来的数字(页号)。

还有一个IPostBackDataHandler接口,由于暂时没不需要,所以没有研究,等用到的时候在研究。

----------------------------------------------------------------------

var theForm = document.forms['form1'];

if (!theForm) {

theForm = document.form1;

}

function __doPostBack(eventTarget, eventArgument) {

if (!theForm.onsubmit || (theForm.onsubmit() != false)) {

theForm.__EVENTTARGET.value = eventTarget;

theForm.__EVENTARGUMENT.value = eventArgument;

theForm.submit();

}

}

如果您打开IE的“查看源文件”,会看到这个js函数,这是怎么来的呢?这个是button 的事件带来的,虽然后面的代码并不需要button了,但是我比较懒,不想自己输出这个js 函数,所以还是保留了button的事件。

好像还是说的不太清楚。自定义控件的事件已经整理清楚了,我可以修改分页控件里的代码了,原来写的比较混乱。分页控件的下一个版本(v2.0.0.3)将增加两个事件,这样就可以向吴旗娃的分页控件那样灵活使用了。

附完整代码:

namespace JYK.Controls.Page

{

[DefaultProperty("Text")]

[ToolboxData("<{0}:EventTest runat=server>")]

public class EventTest : WebControl , INamingContainer,IPostBackEventHandler {

public event EventHandler myClick

{

add

{

Events.AddHandler(this, value);

}

remove

{

Events.RemoveHandler(this, value);

}

}

protected void TestClick(object sender,EventArgs e)

{

EventHandler hd = (EventHandler)base.Events[this];

if (hd != null)

{

hd(sender, e);

}

}

public void RaisePostBackEvent(string Index)

{

Label lbl = (Label)this.FindControl("lbl");

lbl.Text += "自己的事件:" + Index;

}

protected override void CreateChildControls()

{

Label lbl = new Label();

lbl.ID = "lbl";

this.Controls.Add(lbl);

this.Controls.Add(new LiteralControl("
"));

LinkButton btn = new LinkButton();

btn.ID = "btn";

btn.Text = "复合控件的事件测试";

this.Controls.Add(btn);

//给按钮添加内部事件

btn.Click += new EventHandler(btn_Click);

this.Controls.Add(new LiteralControl("
aa"));

this.Controls.Add(new LiteralControl("
[1]"));

this.Controls.Add(new LiteralControl(" [2]"));

this.Controls.Add(new LiteralControl(" [3]"));

this.Controls.Add(new LiteralControl(" [4]"));

}

/**//// 控件内部的事件,由现有的控件的事件触发

void btn_Click(object sender, EventArgs e)

{

Label lbl = (Label)this.FindControl("lbl");

lbl.Text += "控件内部的事件,hi";

//调用外部事件

TestClick(sender, e);

}

protected override void Render(HtmlTextWriter output)

{

if ((base.Site != null) && base.Site.DesignMode)

{

output.Write("

事件测试
");

}

else

{

//Page_Click();

//output.Write("

");

base.Render(output);

//output.Write("

");

}

}

} }

MFC中如何动态创建控件并响应其消息

原理: 利用窗体上的消息都会经OnCmdMsg进行路由处理的原理,在这里截获自己动态生成的那些控件,然后通过自定义消息发送出去(带上控件id),经自己的消息处理函数处理即可。 1、定义起始控件ID号,和自定义消息 UINT Start_CtlID = 1980; #define DynamicBtnMessage WM_USER+200 后面动态创建的控件id号会基于Start_CtlID自增; 2、在OnInitDialog中动态创建控件 窗体类中定义:CArray btnArray 以保存动态创建的按钮 int btnw=120;int btnh = 50;//创建*3个button,顺序排列 for (int i=0;i<5;i++) { for (int j=0;j<5;j++) { CString str; str.Format(_T("Cam%d"),Start_CtlID-1980); r.left =100 + (j*btnw); r.top =250 + (i*btnh); r.bottom = r.top + btnh; r.right =r.left + btnw; CButton *btn = CreateButton(Start_CtlID,str,r, BS_FLAT); btn->ShowWindow(SW_SHOW); btnArray.Add(btn); } }

3 在OnCmdMsg中处理控件点击消息 BOOL CFormDlg::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) { // 判断传进来的控件id位于动态创建button的id之间,并且命令nCode是控件命令(比如点击事件消息),注:其它系统事件也会走到这个函数里进行分发的。 if (nID>=1980 && nID<=Start_CtlID-1 && CN_COMMAND==nCode) { //发送自定义消息,并附上控件ID PostMessage(DynamicBtnMessage,nID,NULL); } return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo); } 4、在自定义消息处理函数中处理点击事件 在BEGIN_MESSAGEMAP和END_MESSAGE_MAP之间加入以下消息映射: ON_MESSAGE(DynamicBtnMessage, &CpngFormDlg::OnDynamicBtnMessage) 在头文件中定义消息响应函数: afx_msg LRESULT OnDynamicBtnMessage(WPARAM wParam, LPARAM lParam); LRESULT CpngFormDlg::OnDynamicBtnMessage(WPARAM wParam, LPARAM lParam) { g_ClickBtnID = (UINT)wParam-1980; if (g_ClickBtnID>=0 && g_ClickBtnID<=100) { CString str; str.Format(_T("button %d is clicked!"),g_ClickBtnID);//获取到点击的是谁 AfxMessageBox(str); } return TRUE; }

WEB服务器控件

WEB服务器控件 编写一个WEB控件至少要包含三个元素:ASP:XXX指明是哪一类控件,ID指明控件的标识符,Ruant 指明是在服务器端运行的。如:

 

一、WEB服务器控件 2、 3 如label1.Text=”您好”; TextBox1.TextMode=TextBoxMode.SingleLine; 二、文字控件 Label用于显示文字,其最常用的属性是Text,用于显示的文字内容。 TextBox控件用于输入文字信息,WEB用于文本输入工作的只有TextBox控件,通过设置控件的TextMode属性来区分文本,密码,多行文本输入方式。注意:文本框内容是字符串类型,如果要做计算,需要作类型转换。如convert.tosingle转成单精度,或single.parse()

MultiLine多行 Pasword密码输入 Columns 以字符为单位指明文本框的显示宽度 Rows 当TextMode为MultiLine时,指明文本框的行数 MaxLength 在单行文本方式下,文本框可以输入的字符数 Wrap 当TextMode为MultiLine时,是否自动换行,默认为TRUE ReadOnly 输入框为只读,默认为FALSE DataBind 将数据源绑定到被调用的服务器控件及其所有子控件上 TextChanged 当文本框内容发生变化时,触动。 文字控件案例一(5_3):制作登录界面 控件类型ID 属性设置说明 Label Label1 Text=用户名用于显示静态文本Label Label2 Text=密码用于显示静态文本Label LblMessage Text=””用于显示提示文本或登 录信息 TexBox TxtUserName TextMode=SingleLine 用于输入用户名TexBox TxtPassWord TextMode=Password 用于输入密码 Button BtnSumit Text=提交向服务器发送登录信息Button BtnRest Text=重置清除文本框内容 { TxtUserName.Text = ""; TxtPassWord.Text = ""; LblMessage.Text = ""; } protected void BtnSumit_Click(object sender, EventArgs e) { if ((TxtUserName.Text.Trim() != "") && (TxtPassWord.Text.Trim() != "")) { LblMessage.Text = "用户名:" + TxtUserName.Text + ":" + "密码" + TxtPassWord.Text; } else if (TxtUserName.Text.Trim() == "") { LblMessage.Text = "请输入用户名"; } else { LblMessage.Text = "请输入密码"; }

C#.NET中动态添加与删除控件

C#.NET中动态添加与删除控件 数组为共享公用功能的一组控件一起工作提供了便捷的途径。例如,一组控件可能用于显示相关的数据,或者在被点击时提供相关的行为。C#本身并不支持控件数组的建立,但是你可以通过编程复制控件数组的所有功能。本文介绍复制控件数组功能的简单组件的建立。 控件数组的主要用处有: 1,使用相同的名称与索引访问一组控件,允许用编号检索和设置数据项并且在整个数组中重复。这个功能可以使用下面的代码实现。 伪代码 myControl[myIndex].MyProperty = myValue; myControl[myIndex + 1].MyMethod 2,多个对象使用同一个事件处理程序(event handler)处理事件,在这些事件中检索和使用索引,代码如下: 伪代码 private void myControl_Click(System.Object sender, System.EventArgs e) { Messagebox.Show("You have clicked MyControl number " + myControl.Index); } 3,在运行时动态添加或者删除控件,代码如下: 伪代码 for (int i = 1; i < 6; i++) { //插入代码来建立控件并给属性赋值 } C#允许你复制与控件数组相关的一些功能。例如,你能使用委托把多个对象的事件绑定到一个事件处理程序。但是,如果把这些功能合并到一个动态的、容易管理的组件中更加简便。本文将建立有下面特性的组件: ·建立索引和排序控件的集合。将使用按钮集合来演示。 ·一个事件处理程序来处理衍生的按钮的点击事件。 ·使用索引引用控件和成员的代码。 ·给窗体动态添加和删除控件的代码。 建立项目 在本节中将建立并命名一个项目,并给该项目添加一个类。该类将封装实现控件数组的代码。 1、选择File-> New-> Project菜单打开New Project对话框。

VB中动态创建控件

VB中动态创建控件 VB相关技术:https://www.doczj.com/doc/b38102051.html,/s/blog_5ccce2820100lof8.html 创建数据驱动窗体 所谓数据驱动窗体就是根据所请求的数据的不同生成相应的窗体。举例来讲,假设你现在有一个数据库,其中有些字段必须根据登录者的身份加以显示,授权级别高的用户可以浏览并修改这些字段的内容;授权级别一般的用户只能浏览这些字段中的数据;授权级别低的用户则不能浏览这些字段中的内容。要做到这一点就得利用VB动态添加控件的功能。 动态创建控件 无论你想要创建何种类型的数据驱动窗体,你必须知道如何在运行时动态地创建控件。你可以通过控件数组做到这一点,但VB6的Controls集合所提供的Add 方法,功能更强大,灵活性更高。使用该方法,你不需要在设计时将控件的实例放在窗体上。实际上,用Add方法你甚至可以创建程序在编译时根本不存在的控件。这种方法的用法也很简单: ' 声明一个窗体级的变量 Dim WithEvents txtTotal As TextBox Sub CreateTextbox() ' 创建新的Textbox控件 Set txtTotal = Controls.Add("VB.TextBox", "txtTotal") ' 将控件移动到你所需要的地方 txtTotal.Move 1000, 800, 1200, 300 ' 创建时,所有的控件都是不可见的 txtTotal.Visible = True End Sub 请注意Add方法的第二个参数:分配给控件的名称。从代码可读性出发,这个名称一般都与变量名相同。你可以用这个名称从Controls集合中获取相应的控件或移除该控件。例如: Controls.Remove "txtTotal" 在变量声明时加上WithEvents关键字,即使在设计时窗体不存在该控件,你也可以为该控件的事件编写代码。

第8章Web服务器控件

第8章Web服务器控件 ?特点 会根据Client 端的状况产生一个或多个适当的HTML 服务器控件,它可以自动侦测Client 端浏览器的种类,并自动调整成适合浏览器的输出。 Web 服务器控件还拥有一个非常重要的功能,那就是支持数据绑定(Data Binding );这种能力可以和数据源连结,用来显示或修改数据源的数据。 它们提供了一些能够简化开发工作的特性,其中包括: 丰富而一致的对象模型:WebControl 基类实现了对所有控件通用的大量属性,这些属性包括ForeColor、BackColor、Font、Enabled 等。属性和方法的名称是经过精心挑选的,以提高在整个框架和该组控件中的一致性。通过这些组件实现的具有明确类型的对象模型将有助于减少编程错误。 对浏览器的自动检测:Web 控件能够自动检测客户机浏览器的功能,并相应地调整它们所提交的HTML,从而充分发挥浏览器的功能。 数据绑定:在Web 窗体页面中,可以对控件的任何属性进行数据绑定。此外,还有几种Web 控件可以用来提交数据源的内容。 在HTML 标记中,Web 控件会表示为具有命名空间的标记,即带有前缀的标记。前缀用于将标记映射到运行时组件的命名空间。标记的其余部分是运行时类自身的名称。与HTML 控件相似,这些标记也必须包含runat="server" 属性。下面是一个声明的示例: <asp:TextBox id="textBox1" runat="server" Text="基督山伯爵"> </asp:TextBox> 介绍几种常见的web控件 4.2.1 Label Web控件 ?作用:用来显示文字。 ?语法: 所要显示的文字 ?示例: <% Page Language=C#> 4.2.2 button控件

VB动态添加控件的简单方法

VB动态添加控件并对其进行拖放操作改变位置 用Controls.Add添加控件 Dim WithEvents mypic As PictureBox Private Sub Command1_Click() Set mypic = Controls.Add("VB.PictureBox", "mypic") mypic.Left = 50 mypic.Top = 50 mypic.Visible = True End Sub 至于拖放操作,在程序中设置好mypic控件的有关属性后,处理mypic的有关事件即可 注意: 如果是控件数组的话,建议采用:load 控件数组名(索引) 的方法添加控件 '可先手工画一个控件,Visable设置为False,Index设置为0 '若需要多个就用load object(index)来加载,并把它们的visable设置为true;不需要多个就真接把原有的那个的visable设成显示就行了。 Private Declare Function ReleaseCapture Lib "user32" () As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _ ByVal hwnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long Private Sub Command1_MouseDown(Index As Integer, Button As Integer, _ Shift As Integer, X As Single, Y As Single) If Button = 1 Then ReleaseCapture '移动控件 SendMessage Command1(Index).hwnd, &HA1, 2, 0& End If End Sub

Web服务器控件

《10.3Web服务器控件》 主题: (1)Web服务器控件简述 Web服务器控件具有以下特性: ●功能丰富的对象模型,该模型具有类型安全编程功能。由于Web服务器控件是 https://www.doczj.com/doc/b38102051.html,框架全新封装提供的新控件,因此其具有严格的类型安全检查。 ●自动浏览器检测。Web服务器控件可以检测浏览器的功能,并为基本型和丰富型 (HTML 4.0或以上) 浏览器创建适当的输出。 ●对于某些控件,可以使用模板来自定义控件的外观。 ●对于某些控件,可以指定控件的事件是立即发送到服务器,还是先缓存然后在提交 窗体时引发。 ●可将事件从嵌套控件(例如表中的按钮)传递到容器控件。 在设计时的“HTML”视图中,显示在页中的控件的格式如下: (2)HTML服务器控件与Web服务器控件的区别 HTML服务器控件与Web服务器控件的区别: (3)Web服务器控件的公共属性 1.System.Web.UI.WebControls.WebControl类的属性 System.Web.UI.WebControls.WebControl 类是System.Web.UI.WebControls 命名空间中的所有控件的基类。 ●AccessKey属性:表示用于快速定位到Web 服务器控件的访问键。默认为空,表

示不设置该属性 ●BackColor属性:表示Web 服务器控件的背景色,默认为空,表示不设置该属性。 ●BorderColor属性:表示Web 控件的边框颜色,默认为空,表示不设置该属性。●BorderStyle属性:表示Web 服务器控件的边框样式,默认为NotSet,其取值为下 列值之一: ?NotSet 不设置边框样式。 ?None 无边框 ?Dotted 虚线边框。 ?Dashed 点划线边框。 ?Solid 实线边框。 ?Double 双实线边框。 ?Groove 用于凹陷边框外观的凹槽状边框。 ?Ridge 用于凸起边框外观的突起边框。 ?Inset 用于凹陷控件外观的内嵌边框。 ?Outset 用于凸起控件外观的外嵌边框。 ●BorderWidth属性:表示Web 服务器控件的边框宽度,默认为空,表示不设置该属 性。 ●Enabled属性:表示是否启用Web 服务器控件。 ●Font属性:表示Web 服务器控件关联的字体属性。 ●ForeColor属性:表示Web 服务器控件的前景色(通常是文本颜色)。 ●Height属性:表示Web 服务器控件的高度。 ●Style属性:包含要在Web 服务器控件的外部标记上呈现的HTML 样式属性 ●TabIndex属性:Web 服务器控件的选项卡索引。默认为0,表示不设置此属性 ●ToolTip属性:表示当鼠标指针悬停在Web 服务器控件上时显示的文本。 ●Width属性:表示Web 服务器控件的宽度。 2.其他的常用属性 ●ID属性:继承自System.Web.UI.Control类,所有Web服务器控件都可以通过该属 性来唯一标识和引用。 ●Text属性:所有接受用户输入,显示数据和提示数据的Web服务器控件都可以通 过Text属性来表示用于在控件上显示的文本,例如TextBox、Lablel、Button、CheckBox等控件。 ●AutoPostBack属性:所有发送窗体或单击按钮时将其数据回传到服务器的Web控 件都具有AutoPostBack属性,该属性是布尔类型。表示当用户修改控件中的文本并使焦点离开该控件时,是否向服务器自动回送。True表示每当用户更改文本框中的文本并使焦点离开该控件时,都会向服务器自动回送,否则为false。默认为false。 ●EnableViewState属性:继承自System.Web.UI.Control类,此属性用于定义控件的

vb动态添加删除控件汇总

VB 动态添加删除控件汇总 1. 概述在使用Visual Basic 进行程序设计的过程中,如果能在运行时刻动态地创建和删除控件,可以极大地丰富界面的处理和变化。本人在设计网络监控系统时,需要在原理图与实物示意图间切换。切换的过程采用本文介绍控件的动态创建和删除来实现,有效地节省了系统资源,同时也有利于简化界面的维护。下面将就Visual Basic 6.0 中的控件在运行时刻的创建和删除的两种方法——控件数组 和控件集合作详细的阐述。2. 基于控件数组的动态控件的创建与删除vb 中的控件数组实际上也是一种数组,其中的每个控件具有相同的Name 属性,但具有不同的Index 属性,在这里Name 属性类似于数组的名字,而Index 属性类似于数组的下标同时,控件数组也支持普通VBA 数组的LBound 、UBound 和Count 方法,控件数组中的控件可以共享一个事件过程,便于代码的编写和集中处理,这正是使用控件数组的最大的理由。但是控件数组与普通的数组并非完全一样,它不需要定义大小,只有这样我们才可以动态的扩展[kuo zhan]它。下面给出利用Load 命令动态添加控件和Unload 命令动态删除控件的一般方法:(1) 首先在窗体上放置一个TextBox ,其Name 属性设置为Text1 ,Index 属性设置为0 ,这样我们就创建了一个

TextBox 控件数组,其中有一个成员。(2)在窗体上放置一个命令按钮Command1 ,在其Click 事件中添加如下的代码:Load Text1(1)Text1(1).left=0Text1(1).visible=true(3) 在窗体上放置一个命令按钮Command2 ,在其Click 事件中添加如下的代码:Unload Text1(1)(4)运行。单击命令按钮Command1 ,窗体上会出现一个新的文本框;单击命令按钮Command2 ,窗体上刚出现的新的文本框就被删除。需要注意的是:Load 命令创建的控件Text1(1) 与设计时已经放在窗体上的控件Text1(0) 有完全相同的属性,也包括大小和位置等属性,例外的就是Index 属性不一样,Visible 属性默认为False, 所以必须在Load 方法执行之后,执行调整控件位置的语句[yu ju],并把其Visible 属性设置为True ,以便在窗体上可见。Unload 命令只能删除动态加载的控件,若删除设计时创建的控件会产生错误[cuo wu]。另外,利用上面提到的数组的一些方法,可以有效的简化代码的编写。以下的代码可以删除所有动态创建的Text1 控件数组中的控件: Do While Text1.Count>1Unload Text1(Text1.Ubound)Loop需要说明[shuo ming]的是,菜单数组是控件数组的一种特殊的形式,只是它是在菜单编辑器[bian ji qi]中设置相应的Name 和Index 属性,而且要求一个菜单控件数组中的菜单项必须是

android中利用linearlayout动态添加控件 - androider的专栏 -

Android中利用LinearLayout动态添加控件- Androider的 专栏-... 在androidUI布局中,一般都是利用xml来布局控件,这是比较方便和直观的,但是有时却需要动态生成,下面就举2个简单例子来说明怎么动态添加控件: 1.动态添加2个垂直排列的Button view plaincopy to clipboardprint? 01. @Override 02. public void onCreate(Bundle savedInstanceState) { 03. super.onCreate(savedInstanceState); 04. //setContentView(https://www.doczj.com/doc/b38102051.html,yout.main); 05. final LinearLayout layout2=new LinearLayout(this); 06. layout2.setOrientation(LinearLayout.VERTICAL); 07. Button btn1=new Button(this); 08. setContentView(layout2); 09. Button btn2=new Button(this); 10. btn1.setText("Button1"); 11. btn2.setText("Button2"); 12. layout2.addView(btn1);

13. layout2.addView(btn2); 14. 15. 16. setContentView(layout2); 17.} @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(https://www.doczj.com/doc/b38102051.html,yout.main); final LinearLayout layout2=new LinearLayout(this); layout2.setOrientation(LinearLayout.VERTICAL); Button btn1=new Button(this); setContentView(layout2); Button btn2=new Button(this); btn1.setText("Button1"); btn2.setText("Button2"); layout2.addView(btn1); layout2.addView(btn2); setContentView(layout2); }

web服务器控件的取值和属性设置

实训2 web服务器控件的取值和属性设置 09计算机网络史丹 一、实训目的 1、掌握标签Label,文本框TextBox,单选按钮组RadioButtonList和多选按钮组CheckLBoxList,还有一个按钮Button控件的属性设置 2、学会如何获取上面这些控件的值 3、学会如何编写代码 二、实现功能及要求 练习添加新的Web窗体,设计一个用户注册界面,包括:姓名、账号、密码、性别、爱好、电子邮箱、说明;单击确定按钮后,在标签上输出用户的输入信息。 三、界面设计及后台代码 在https://www.doczj.com/doc/b38102051.html,应用程序开发界面左边的工具栏中,拖出8个标签Label,5个文本框TextBox,1个单选按钮组RadioButtonList和1个多选按钮组CheckLBoxList,还有一个按钮Button。分别在8个标签属性框找到Text属性输入对应的内容,在button的属性框里找到Text的属性,然后编写相应的内容;在单选按钮组RadioButtonList和多选按钮组CheckLBoxList 有一个项目集合(Items Collection)属性,单击后会出现添加项目窗口并可设置项目的显示文本和相应的值,并在属性框里设置他们的排列方式为水平排列。 如下图所示: 然后,双击确定按钮,在按钮的Click事件中写入如下代码,又双击复选框组CheckBoxList,在其中编写如下代码: using System; using System.Collections; using https://www.doczj.com/doc/b38102051.html,ponentModel; using System.Data; using System.Drawing;

vb动态添加控件

搞了快一个下午的这个东东, 其实是在搞一个在VB6.0中动态添加控件和时间的一个实现, 没用过VB6.0, IDE也么有VS好用... 好多东东在探索 结果就报了个这个错误.... run-time error '91' object variable or with block variable not set 查了好久, 原来是使用变量的时候, 没有去new它, 因为别人给的sample中, Dim的时候, 有new, 单身我拿过来用的时候, dim后面的new在build的时候不通过, 我就拿掉了, 结果运行的时候一直出这个问题.. 动态添加控件和时间的, 参考如下(等哪天我有空了,再来写) 创建数据驱动窗体 所谓数据驱动窗体就是根据所请求的数据的不同生成相应的窗体。举例来讲,假设你现在有一个数据库,其中有些字段必须根据登录者的身份加以显示,授权级别高的用户可以浏览并修改这些字段的内容;授权级别一般的用户只能浏览这些字段中的数据;授权级别低的用户则不能浏览这些字段中的内容。要做到这一点就得利用VB动态添加控件的功能。 动态创建控件 无论你想要创建何种类型的数据驱动窗体,你必须知道如何在运行时动态地创建控件。你可以通过控件数组做到这一点,但VB6的Controls集合所提供的Add方法,功能更强大,灵活性更高。使用该方法,你不需要在设计时将控件的实例放在窗体上。实际上,用Add方法你甚至可以创建程序在编译时根本不存在的控件。这种方法的用法也很简单: ' 声明一个窗体级的变量 Dim WithEvents txtTotal As TextBox Sub CreateTextbox() ' 创建新的Textbox控件

vb实现动态添加控件

vb实现动态添加控件 VB6有一个新功能,可以动态添加控件,不用控件数组: object.Add (ProgID, name, container) 参数说明 Object 必需的。一个对象表达式,其值是“应用于”列表中的一个对象。 ProgID 必需的。一个标识控件的字符串。大多数控件的ProgID 都可通过查看对象浏览器来决定。控件的ProgID是由控件的库和类组成的。 例如,CommandButton控件的ProgID是 https://www.doczj.com/doc/b38102051.html,mandButton。在ProgID 与对象浏览器中所显示的不一样的情况下,Visual Basic 将显示一个包括正确 ProgId 的错误信息。 name 必要的。一个字符串,用来标识集合的成员。 container 可选的。一个对象引用,它指定控件的容器。如果没有指定或为NULL,缺省值为 Controls 集合所属的容器。通过指定该参数,可以把一个控件放置在任何现存的容器控件(如 Frame控件)中。用户控件或 ActiveX 文档也可以作为一个容器。 举例: //在picture1上面添加一个commandbutton Private Sub Form_Load() Form1.Controls.Add "https://www.doczj.com/doc/b38102051.html,mandButton", "cmdOk", Picture1 With Form1!cmdOk .Visible = True .Width = 500 .Caption = "确认(&Y)" End With End Sub 重点:当您添加一个未引用的需要许可证的控件到一个现存的(已部署好的)应用程序时,在使用Add 方法之前您必须也添加这个控件的许可证关键字。 在运行时添加未引用的控件: 您也可以利 Add 方法来动态添加一个在工程中没有被引用的控件。(“未引用的”控件是不出现在 Toolbox 中的控件)。为此,您必须也把控件的License关键字添加到 Licenses 集合中。下面的示例中在添加控件本身之前添加了控件的许可证关键字: Option Explicit Private WithEvents extCtl As VBControlExtender Private Sub Form_Load() Licenses.Add "prjWeeks.WeeksCtl", "xydsfasfjewfe" Set extCtl = Form1.Controls.Add("prjWeeks.WeeksCtl", "ctl1") extCtl.Visible = True The control is invisible by default. End Sub 但是,为了编程这样一个未引用控件的事件,您必须使用WithEvents关键字声明一个对象变量为VBControlExtender 对象(如上),并且设置该对象变量到Add 方法返回的引用上。然后,利用VBControlExtender 对象的ObjectEvent事件来编程该控件的事件。下面是一个简单的例子。 Option Explicit Dim WithEvents objExt As VBControlExtender 声明 Extender 变量

VB6.0动态增删控件

Vb6.0动态增删控件的实现 经常在网上和杂志上看到问vb怎样动态增加控件,笔者在编一程序时,曾经用到,下面作一个较为详细的描述,希望能给大家有所帮助。 最简单的方法:控件数组。 在VB编程中有一个控件数组的概念, 通过置控件的INDEX 索引值的控制, 不仅可以建立一组具有紧密联系的相同控件, 而且可以实现在程序运行状态中增加控件数目功能, 这在实际编程中应用的非常广泛;在编程中实现具体增加控件数组如下代码即可,请先在窗体上添加一个option控件,名称为option1,并将index属性设为0. Private Sub Form_ load() Dim i As Integer For i = 1 To 5 Load Option1(i) ' 给数组添加 5 个选项按钮。 Option1(i).Top = Option1(i - 1).Top + 350’设置顶端位置 Option1(i).left= Option1(i - 1).left+800 Option1(i).Visible = True’显示增加的控件 Option1(i).caption = i Next i End Sub Private Sub Option1_Click(Index As Integer) MsgBox ("您点击了index为" & Index & "的option控件.") End Sub (二)通过Add方法实现 Add方法在Controls集合中添加一个控件并返回一个对控件的引用。Add 方法的语法为:

Object.Add(ProgID,Name,Container)

web服务器控件和HTML控件的区别用法

谈谈HtmlControl与WebControl的区别以及各自应该什么时候用 Web控件和Html控件虽然好多功能相同并且长得很像 但是它们的内部实现机制是完全不一样的 Web控件要比Html控件执行效率要好 1. 使用起来也相当方便,举个简单的例子,例如Button的生成: Html控件是将庞大控件集合全部弄到页面中,用到哪个功能,就设置一下属性,如下: 这样会占用相当大的控件资源 Web控件是将集成式的拆解成单功能的: 这样就可以节省不必要的控件所占用的资源了 2.Web控件具有回送功能,能够用ViewState维持控件的状态. Html控件则不能,当点击页面的操作,其状态就会丢失. 可以做这样的一个实验: I. 分别建立两个文件: a.html b.aspx II.在a.html页面中加Html控件的RadioButton和一个button, 在b.aspx中加Web控件的RadioButton和一个button III.a.html直接双击浏览器运行,b.aspx通过IIS运行 IV.在a.html运行界面中,选中RadioButton,再单击Button按钮,会发现RadioButton会取消选中(丢失其状态),但在b.aspx页面执行同样的操作,RadioButton不会丢失,因为ViewState 给它保存了状态. 您可以在运行界面点击浏览器菜单"查看"->“源文件",打开Html代码文件, 找到加密后的ViewState,类似于下面: 其实ViewState实现原理也是将一些信息放到隐藏的一个控件中,并且https://www.doczj.com/doc/b38102051.html,生成的ViewState信息 是存储在客户端的 这里要注意的一点是: 只有当格式为*.aspx文件,并且控件具有属性:"runat=server"时,回送功能才能打开 3. Html控件与Web控件最大的区别是它们对事件处理的方法不同。对于Html窗体控件,当引发一个事件时,浏览器会处理它。但对于Web控件,事件仅由浏览器生成,但浏览器不会处理它,客户端要给服务器发个信息,告诉服务器处理事件。不过有些事件, 比如: 按下键/移动/鼠标等事件,https://www.doczj.com/doc/b38102051.html,中没有这些事件 (因为这些事件即时性强,服务器处理得不够及时),这时候Html控件就发挥其作用了,结合Html事件 协助完成.

VB动态添加控件的简单方法

V B动态添加控件的简单 方法 SANY GROUP system office room 【SANYUA16H-

V B动态添加控件并对其进行拖放操作改变位置用Controls.Add添加控件 DimWithEventsmypicAsPictureBox PrivateSubCommand1_Click() Setmypic=Controls.Add("VB.PictureBox","mypic") mypic.Left=50 mypic.Top=50 mypic.Visible=True EndSub 至于拖放操作,在程序中设置好mypic控件的有关属性后,处理mypic的有关事件即可 注意: 如果是控件数组的话,建议采用:load控件数组名(索引)的方法添加控件 '可先手工画一个控件,Visable设置为False,Index设置为0 '若需要多个就用loadobject(index)来加载,并把它们的visable设置为true;不需要多个就真接把原有的那个的visable设成显示就行了。 PrivateDeclareFunctionReleaseCaptureLib"user32"()AsLong PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(_ ByValhwndAsLong,ByValwMsgAsLong,_ ByValwParamAsLong,lParamAsAny)AsLong PrivateSubCommand1_MouseDown(IndexAsInteger,ButtonAsInteger,_ ShiftAsInteger,XAsSingle,YAsSingle) IfButton=1Then ReleaseCapture'移动控件 SendMessageCommand1(Index).hwnd,&HA1,2,0&

VB6.0动态加载ActiveX控件漫谈

熟悉VB的朋友对使用ActiveX控件一定不会陌生,众多控件极大地方便了编程,但唯一的缺陷是不能动态加载控件,必须在设计时通过引用,将控件放置在窗体上。VB6.0已能够解决该问题,只是帮助中没有明确说明,并且没有描述到一些关键功能,由于以前的版本中可以动态创建进程外服务:如果对象是外部可创建的,可在Set 语句中用New 关键字、CreateObject 或GetObject 从部件外面将对象引用赋予变量。如果对象是从属对象,则需使用高层对象的方法,在Set 语句中指定一个对象引用: Dim xlApp1 As Excel.Application Set xlApp1 = New Excel.Application 或 Dim xlApp As Object '定义存放引用对象的变量。 Set xlApp = CreateObject("excel.application") xlApp.Visible = True 这些语法很容易造成误导,以为动态加载ActiveX控件也是此方法,可能有朋友也象我一样利用CreateObject尝试了无数次,却无功而返,不知微软公司是出于何种考虑,动态加载ActiveX控件是扩展控件集合的方式实现,通过实际摸索,终于就如何实现动态ActiveX控件找出了一条切实可行的方法,下面以一个具体的实例来详细说明。 一、ActiveX控件 ActiveX 控件是Visual Basic 工具箱的扩充部分。使用ActiveX 控件的方法与使用其它标准内装的控件,如CheckBox 控件,完全一样。在程序中加入ActiveX 控件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。 ActiveX 部件通过客户端/服务器关系与应用程序—及与部件相互之间—交互作用。客户端是使用部件功能的应用程序代码或部件。服务器是部件及其关联的对象。例如,假设应用程序使用ActiveX 控件来提供一个标准的雇员窗体,供公司的多种应用程序使用。提供雇员窗体的ActiveX 控件就是服务器,使用这个控件的应用程序就是服务器的客户端。 二、加载方法 VB6.0 中对Controls 集合进行了扩展,以前版本中Controls 集合在窗体上列举出已加载的控件,这在迭代过程中是很有用的。Controls 集合标识一个叫做Controls 的内在窗体级变量。如果忽略可选的object 所在处的整数,则关键字Controls 必须包括在内。我们通常在窗口中使用如下代码: Text1.Text="Hello, world" 其实也可以使用如下代码达到同一目的: Controls(1).Text="Hello, world" 在VB6.0中除了原来的Clear、Remove 方法外(很奇怪,为什么微软在VB5.0中只提供这两种方法,而没有提供Add方法,因为没有Add,这两种方法也就没什么用处),增加了Add 方法,该方法就是用于动态加载控件的: Controls.Add(progid as String, Name as String);

在Delphi中动态创建控件并处理添加事件处理

在Delphi中动态创建控件并处理添加事件处理unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls; type TForm1 = class(TForm) procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } btn:TButton; procedure btnClick(Sender:TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btnClick(Sender: TObject); begin close; end; procedure TForm1.FormDestroy(Sender: TObject); begin btn.Free; end; procedure TForm1.FormCreate(Sender: TObject);

begin btn:=TButton.Create(Self); btn.Parent:=Self; btn.Height:=30; btn.Width:=75; btn.Visible:=True; btn.top:=Self.Top+50; btn.Left:=Self.Left+50; btn.Caption:='动态控件'; btn.OnClick:=btnClick end; end.

相关主题
文本预览
相关文档 最新文档