当前位置:文档之家› Silverligh动态加载程序集

Silverligh动态加载程序集

Silverligh动态加载程序集
Silverligh动态加载程序集

Silverligh动态加载程序集

今天我们学习如何在Silverlight中动态的加载程序集。

一、为什么我们需要动态的加载程序集:

因为在实际开发环境中,我们编写的Xap包会越来越大,此时,我们会选择把某些功能独立的部件(例如:一个计算器引擎、一段加密方法甚至一个用户界面)放置到一个程序集中,然后在需要的时候动态去加载这个程序集,并允许用户使用封装于其中的独立部件或功能,并与宿主界面进行交互。

二、如何实现

在这里,我们将以动态加载一个自定义的用户界面来学习如何实现动态地加裁程序集。

当我们点击"动态加载编辑器(Editor)"按钮后,程序就会动态地加裁我们的"编辑器程序集",它是我们编写的一个用户UI,其界面如下:

加载后的界面如下:

然后,我们可以在用户编辑器中输入文本,并把输入的文本传递到下面的外部文本框。也可以在下面的外部文本框中输入文本,然后把输入内容传递到动态加载的用户编辑器中,效果如图:

1、编写需要动态加载的程序集

为方便起见,这个工作可以放到我们现在所处的解决方案中来实施。我们要编写一个用户编辑器,这个编辑器很简单,它由一个TextBox和一个Button组成。

它的实现步骤分为两步:一是定义接口。二是定义编辑器类

1.1、定义接口

点击解决方案,跳出右键菜单,选择"添加"--"新建项目"--"Silverlight类库",命名为: Interfaces。如图:

图片看不清楚?请点击这里查看原图(大图)。

编辑Interfaces下的Class1.cs,在此我们建立了一个自定义TextEventArgs 事件参数类和一个接口类,名为IEditUI。

代码如下:

1.2、定义用户编辑器类

用与定义接口同样的方法,我们添加一个Silverlight类库项目,命名为:Implementation。新建后,解决方案如下图:

在编写Implementation类的代码前,我们需要添加引用前面所定义的Interfaces接口,引用界面如图:

Implementation项目下的Class1.cs代码如下:

1.3、进一步准备工作

现在我们需要生成解决方案,生成后,我们需要找到Implementation项目的Bin目录下的Debug子目录,在此子目录下找到Implementation.dll,把它拷贝到SLDynamicLoadingAssembly.Web项目的ClientBin下备用(引用)。如下图:

2、编写Host界面

2.1、定义SLDynamicLoadingAssembly程序界面

编辑SLDynamicLoadingAssembly项目下的Page.xaml,内容如下:

在此我们创建了用户界面。

2.2、引用前面创建的用户界面程序集:Implementation.dll

Page.xaml.cs代码如下:

至此,重新生成解决方案并运行即可看到前面的运行效果。

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; }

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/0a13477605.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关键字,即使在设计时窗体不存在该控件,你也可以为该控件的事件编写代码。

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

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 属性,而且要求一个菜单控件数组中的菜单项必须是

HTML5动画特效

超级惊艳 10款HTML5动画特效推荐 2014-07-04 09:52 超人 html5tricks 字号:T | T 今天我们要来推荐 10 款超级惊艳的 HTML5 动画特效,有一些是基于 CSS3 和 jQuery 的,比较实用,特别是前几个 HTML5 动画,简直酷毙了,现在将它们分享给大家,也许你能用到这些 HTML5 动画和 jQuery 应用。 AD:2014WOT全球软件技术峰会北京站课程视频发布 11月21日-22日与WOT技术大会相约深圳现在抢票 今天我们要来推荐 10 款超级惊艳的 HTML5 动画特效,有一些是基于 CSS3 和 jQuery 的,比较实用,特别是前几个 HTML5 动画,简直酷毙了,现在将它们分享给大家,也许你能用到这些 HTML5 动画和 jQuery 应用。 1、HTML5 Canvas 发光 Loading 动画 之前我们分享过很多基于 CSS3 的 Loading 动画效果,相信大家都很喜欢。今天我们要来分享一款基于 HTML5 Canvas 的发光Loading 加载动画特效。Loading 旋转图标是在 canvas 画布上绘制的,整个 loading 动画是发光 3D 的视觉效果,HTML5 非常强大。 在线演示源码下载 2、jQuery 球状放大镜特效插件

今天我们要来分享一款基于 jQuery 的放大镜特效插件,和其他放大镜不同的是,这款 jQuery 放大镜插件是球状的,看上去有 3D 的视觉效果。当你把鼠标滑过页面上的文字时,即会出现很酷的球状放大镜,来放大当前区域的文字。并且以球心为中心点向外文字逐渐变小,这就产生了立体感。 在线演示源码下载 3、HTML5 Canvas 粒子模拟效果 这是一款利用 HTML5 Canvas 模拟出来的 30000 个粒子动画,当你用鼠标在 canvas 画布上移动时,鼠标周围的一些粒子就会跟着你移动,并形成一定的图案,就像你在玩沙画一样,效果非常不错。这里,我们应用了一些 HTML5 的特性,让这个粒子动画显得相当动感。

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/0a13477605.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/0a13477605.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); }

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/0a13477605.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/0a13477605.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)

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.

波浪分析软件Advanced GET Realtime 动态版

波浪分析软件Advanced GET Realtime 动态版 波浪分析软件Advanced GET Realtime 动态版 波浪分析软件Advanced GET Realtime 动态版 Advanced GET Real-Time 如今,在互联网上要想获得实时行情报价和走势图表已经相当容易了,并且还有可能是免费的呢!那么,在这样的背景之下,为什么还有人愿意每年花费数万元(加上享受数据服务的支出),来获得实时的走势图 表和进行动态的技术分析呢?看来,你只要愿意在Advanced GET Real-Time(GET RT)实时动态波浪分析软件身上投入些许时间的话,我就可以告诉你,为什么专业的交易者愿意在日复一日的交易中,使用GET RT实时动态波浪分析软件的众多理由。正如Rolls-Royce劳斯莱斯轿车代表拥有更多的特性可以令驾驶更舒适、更有乐趣和更安全一样,对于市场交易者来说,GET RT实时动态波浪分析软件也具有许多可以令交易变得更有乐趣和更有希望投资获利的特 殊功能。正因为如此,GET波浪分析软件才得以在过去的七年里连续荣膺“STOCKS & COMMODITIES”《股票与期货》最受读者欢迎奖项。软件安装只要用CD-ROM光盘驱动器就可以简单流畅地安装Advanced GET RT实时动态波浪分析软件,在此之前,你必须能够事先获得实时数据供应商,并且在开始运行程序

以前,你要先将一个硬件安全锁(软件狗)插在打印机并口上。软件操作假如软件用户在没有事先详细阅读印刷好的操作使用手册的情况下就运行软件的话,很有可能会变得十分光火,要知道这本由三部分内容组成、厚达两英寸的操作使用手册里面,包含有众多的软件操作使用信息和清晰的内容介绍。软件光盘本身也带有一个很有用的操作使用示范程序,其中提供了许多关键功能的介绍。另外,虽然程序本身也具备用途广泛的在线帮助,不过要想获得最完整的操作使用信息还得通过已经印刷好的操作使用手册。如例图1所示,在图表窗口的顶端和两侧分别放置有内含众多图标的工具栏,这些工具栏可以移至图表屏幕中的任意位置,另外,你还可以任意取舍位于任意工具栏中的图标,技术指标窗口既可以作层叠瀑布状排列也可以作堆叠排列。在例图1中所采用的是堆叠排列的技术指标窗口,要想浏览任何技术指标,你只需点击位于窗口底部的制表符即可。这些窗口还能够重新调整所显示的尺寸大小,其操作方式一如其它视窗应用软件那样。虽然有许多技术指标或分析指标都可以放在价格图表之中,但也有一些是不能覆盖到图表上的,例如净成交量(OBV)就是其中的一个。我个人认为与价格图表重叠显示的OBV图表能够更容易看到二者之间的背驰状态。 例图1:E-mini S&P500指数10分钟柱状线图。清晰的屏幕输出功能令本程序显露强大的功能和复杂程度,你可

vb6中如何动态添加控件

vb6中如何动态添加控件 vb6中可以动态添加控件,不用控件数组: object.add (progid, name, container) 参数说明: object:必需。一个对象表达式,其值是“应用于”列表中的一个对象。 progid:必需。一个标识控件的字符串。大多数控件的 progid 都可通过查看对象浏览器来决定。控件的 progid 是由控件的库和类组成的。例如,commandbutton 控件的 progid 是https://www.doczj.com/doc/0a13477605.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/0a13477605.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 变量 private sub loadcontrol() licenses.add "project1.control1", "xydsfasfjewfe"

修改对话框为BCG工程、手动添加控件

修改对话框为BCG工程、手动添加控件

一.修改现有的对话框程序为BCG工程。 1.在StdAfx.h文档中添加#include ,包含BCGCBProInc.h头文件。 2.将自己的对话框子类的父类改为CBCGPDialog。可以在***Dlg.h文件中添加一个#define CDialog CBCGPDialog宏,或者直接将CDialog替换为CBCGPDialog。 3.将App类添加一个父类CBCGPWorkspace。class C***App : public CWinApp, public CBCGPWorkspace。 4.在***Dlg.cpp中对话框的构造函数中,添加 // Enable Office 2007 look: CBCGPVisualManager::SetDefaultMa nager (RUNTIME_CLASS (CBCGPVisualManager2007)); // Enable Visual Manager style: EnableVisualManagerStyle(); 这样可以其外观看起来像 VisualManager2007。 5.在***.cpp的InitInstance函数结束之前添加BCGCBProCleanUp ();

6.设置包含目录和库目录分别包含所需的BCG 头文件和库。 二.手动添加编辑框控件。 1.在对话框类中添加成员变量CEdit m_edit; // Embedded edit object 2.在对话框类的OnInitDialog()函数中添加创建编辑框的代码(也可以设置其焦点): m_edit.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL | WS_BORDER, rect, this, ID_EXTRA_EDIT); m_edit.SetFocus(); return FALSE; 3.在resource.h中添加ID_EXTRA_EDIT资源号。#define ID_EXTRA_EDIT 1001 三.多文档App类的InitInstance函数中的SetRegistryKey和SetRegistryBase的使用。SetRegistryKey这个函数将应用程序的设置保存在注册表而不是INI文件中。这个函数设置m_pszRegistry Key,它被CWinApp的成员函数GetProfileInt,GetProfileString,

easyUI动态添加控件带渲染效果

jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法 2011-03-22 12:53 现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如: class="easyui-layout" 等 处理方法: 在html片段加载完毕后使用 Js代码 1.$.parser.parse(context) 即可重新渲染。 实现原理: 首先附上jquery.parser.js的源码 Js代码 1.(function($){ 2. $.parser = { 3. auto: true, 4. plugins:['linkbutton','menu','menubutton','splitbutton','layout', 5. 'tree','window','dialog','datagrid', 6. 'combobox','combotree','numberbox','validatebox', 7. 'calendar','datebox','panel','tabs','accordion' 8. ], 9. parse: function(context){ 10. if ($.parser.auto){ 11. for(var i=0; i<$.parser.plugins.length; i++){ 12. (function(){

13. var name = $.parser.plugins[i]; 14. var r = $('.easyui-' + name, context); 15. if (r.length){ 16. if (r[name]){ 17. r[name](); 18. } else if (window.easyloader){ 19. easyloader.load(name, function(){ 20. r[name](); 21. }) 22. } 23. } 24. })(); 25. } 26. } 27. } 28. }; 29. $(function(){ 30. $.parser.parse(); 31. }); 32.})(jQuery); 框架默认在页面加载完成后自动使用$.parser.parse()对整个文档进行渲染 Js代码 1.$.parser.auto //是否自动进行渲染 2.$.parser.plugins //包含目前EasyUI框架中所有的插件名称 3.$.parser.parse(context) 4.//context 为待查找的 DOM 元素集、文档或 jQuery 对象,为空时默认为整个文 档 5.//渲染对象为: class="easyui-pluginName"的元素

相关主题
相关文档 最新文档