首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

动态创建控件的有关问题

2012-01-26 
动态创建控件的问题在数据库创建一个控件存储表,下面是表的结构控件ID控件名称控件类型控件描述控件Left控

动态创建控件的问题
在数据库创建一个控件存储表,下面是表的结构
  控件ID
  控件名称
  控件类型
  控件描述
  控件Left
  控件Top
  控件Width
  控件Height
  控件Caption/Text

      然后从数据库中将这些记录根据过滤条件取出来,在Form上形成控件,同时响应事件。现在的问题是取出来画在窗体上没有问题,但是它们都不响应事件。
      如果用WithEvents只能够对已知的组件设置事件,对于动态过滤出来的组件这个语句无能为力。因为它不支持数组。同时必须写在模块的最前面,才能为动态加载的组件提供支持。
    曾经做过的尝试。为每个对应的组件些个类模块。需要加载时实例化对应的类,但是这个类模块必须存在于每个需要这样处理的工程中,不利于代码的重用和管理。当把这些类模块单独编译为独立的ActX   Dll后事件就不响应了。
        关于这个问题现在网上有许多资料,包括微软的MSDN上也有不少的例子。但是这些例子中都没有解决事件响应的问题

[解决办法]
那是不可能实现的,因为VB的动态的机制不可行,要不就是先创建好几个原始组件,让他们各自成为数组,生成的时候,增加控件,把事先放好的控件写上代码。可以分好多的case 每个怎么处理事件。但是都是特别的不方便,所以不行。

VB本身就不是纯面向对象的,所以对象的类也不是很适合这样的思路。

建议还是用VB.NET就应该可以了
[解决办法]
知道类型的话,使用 控件数组,比较好。

[解决办法]
事实上:1999年我们也曾拼命地调研该方案的可行性。
我们得出的最终结论是:拿来研究研究还行,做简单要求的画面也可以;但要用于复杂要求的画面的话,代价太大,不合适。

最切实的建议是:
1)针对你要用的控件,在画面建立一个INDEX=0的控件。
2)对相应的控件建立相应的事件;
3)加载控件时,以画面控件为基础创建Index=1,2...n的控件数组。
这样建立的控件是可以响应相应事件的。

热点排行