vb窗体对话框显示:达到极限,该窗体不能在创建更多控件。怎么解决?
在代码窗口中可看到,最多就30个,但同类控件编号不连续,如LABEL控件编号已到133,实际最多也就是20个,中间编号断续(从窗体上删除,会出现断号),但再往窗体上增加L...
在代码窗口中可看到,最多就30个,但同类控件编号不连续,如LABEL控件编号已到133,实际最多也就是20个,中间编号断续(从窗体上删除,会出现断号),但再往窗体上增加LABEL,VB自动从134号往上增加,不知对达到极限可否有影响,我也不会怎样往断续的号码中补充LABEL编号。
展开
展开全部
使用控件数组,就是复制一个控件,粘贴的时候选“是 ”
控件数组是一组具有共同名称和类型的控件。它们的事件过程也相同。一个控件数组至少应有一个元素,元素数目可在系统资源和内存允许的范围内增加;数组的大小也取决于每个控件所需的内存和 Windows 资源。在控件数组中可用到的最大索引值为 32767。同一控件数组中的元素有自己的属性设置值。常见的控件数组的用处包括实现菜单控件和选项按钮分组。
注意 Visual Basic 包括了在运行时动态地将未引用的控件添加到 Controls 集合中的能力。本主题仅指在设计时通过将一个控件剪切和粘贴到窗体上添加的引用控件。有关在运行时添加控件的详细信息,请参阅参考主题“Add 方法(Controls 集合)”和“Add 方法(Licenses 集合)”。
为何使用控件数组
在设计时,使用控件数组添加控件所消耗的资源比直接向窗体添加多个相同类型的控件消耗的资源要少。当希望若干控件共享代码时,控件数组也很有用。例如,如果创建了一个包含三个选项按钮的控件数组,则无论单击哪个按钮时都将执行相同的代码。
若要在运行时创建一个控件的新实例,则新控件必须是控件数组的成员。使用控件数组时,每个新成员继承数组的公共事件过程。
使用控件数组机制是不可能在运行时创建新控件的,因为每个新控件都继承为数组编写好的事件过程。例如,如果窗体上有若干文本框,而且每个文本框都接受一个日期数值,则可创建一个控件数组,使所有文本框共享同一个合法性检查代码。
示例应用程序:Calc.vbp
图 7.3 所示的 Calculator 示例应用程序(列在 Samples 目录中)包含两个控件数组─ 数字按钮和操作按钮。
图 7.2 控件数组示例
下表列出 Calculator 示例中控件数组的 Name 和 Index 属性值。
数字 (n) 操作符 (n)
0 = Number(0) + = Operator(1)
1 = Number(1) – = Operator(2)
2 = Number(2) X = Operator(3)
3 = Number(3) / = Operator(4)
4 = Number(4) = = Operator(5)
5 = Number(5)
6 = Number(6)
7 = Number(7)
8 = Number(8)
9 = Number(9)
请注意示例是如何使用 object(index) 语法引用每个控件的。在创建控件时指定索引值。实际上,在设计时为一个控件指定任意的索引,这将使控件成为数组的一部分。
Index 属性区分控件数组中的元素。当数组中的一个控件识别了一个事件时,Visual Basic 将调用公共事件过程并传递一个参数(Index 属性的值),分辨是哪个控件识别事件。
例如,Number_Click 事件过程的第一行代码是这样的:
Private Sub Number_Click (Index As Integer)
如果 Number(0) 识别事件,则 Visual Basic 将 0 作为 index 参数传递,而如果 Number(1) 识别事件,则 Visual Basic 将 1 作为 index 参数传递。与索引值不同,对于 Number(0) 到 Number(9) 已执行的其余 Number_Click 代码都是相同的。
控件数组是一组具有共同名称和类型的控件。它们的事件过程也相同。一个控件数组至少应有一个元素,元素数目可在系统资源和内存允许的范围内增加;数组的大小也取决于每个控件所需的内存和 Windows 资源。在控件数组中可用到的最大索引值为 32767。同一控件数组中的元素有自己的属性设置值。常见的控件数组的用处包括实现菜单控件和选项按钮分组。
注意 Visual Basic 包括了在运行时动态地将未引用的控件添加到 Controls 集合中的能力。本主题仅指在设计时通过将一个控件剪切和粘贴到窗体上添加的引用控件。有关在运行时添加控件的详细信息,请参阅参考主题“Add 方法(Controls 集合)”和“Add 方法(Licenses 集合)”。
为何使用控件数组
在设计时,使用控件数组添加控件所消耗的资源比直接向窗体添加多个相同类型的控件消耗的资源要少。当希望若干控件共享代码时,控件数组也很有用。例如,如果创建了一个包含三个选项按钮的控件数组,则无论单击哪个按钮时都将执行相同的代码。
若要在运行时创建一个控件的新实例,则新控件必须是控件数组的成员。使用控件数组时,每个新成员继承数组的公共事件过程。
使用控件数组机制是不可能在运行时创建新控件的,因为每个新控件都继承为数组编写好的事件过程。例如,如果窗体上有若干文本框,而且每个文本框都接受一个日期数值,则可创建一个控件数组,使所有文本框共享同一个合法性检查代码。
示例应用程序:Calc.vbp
图 7.3 所示的 Calculator 示例应用程序(列在 Samples 目录中)包含两个控件数组─ 数字按钮和操作按钮。
图 7.2 控件数组示例
下表列出 Calculator 示例中控件数组的 Name 和 Index 属性值。
数字 (n) 操作符 (n)
0 = Number(0) + = Operator(1)
1 = Number(1) – = Operator(2)
2 = Number(2) X = Operator(3)
3 = Number(3) / = Operator(4)
4 = Number(4) = = Operator(5)
5 = Number(5)
6 = Number(6)
7 = Number(7)
8 = Number(8)
9 = Number(9)
请注意示例是如何使用 object(index) 语法引用每个控件的。在创建控件时指定索引值。实际上,在设计时为一个控件指定任意的索引,这将使控件成为数组的一部分。
Index 属性区分控件数组中的元素。当数组中的一个控件识别了一个事件时,Visual Basic 将调用公共事件过程并传递一个参数(Index 属性的值),分辨是哪个控件识别事件。
例如,Number_Click 事件过程的第一行代码是这样的:
Private Sub Number_Click (Index As Integer)
如果 Number(0) 识别事件,则 Visual Basic 将 0 作为 index 参数传递,而如果 Number(1) 识别事件,则 Visual Basic 将 1 作为 index 参数传递。与索引值不同,对于 Number(0) 到 Number(9) 已执行的其余 Number_Click 代码都是相同的。
展开全部
你可以手工在属性窗口修改label控件的Index属性,从0开始递增,这样就能消除断号。
不过我不知你是怎么新增控件数组的,我实际操作的结果,用复制粘贴的方式,新增的控件的index是从最小的空号开始的,而不是你说的从现存的最大号+1开始的。
不过我不知你是怎么新增控件数组的,我实际操作的结果,用复制粘贴的方式,新增的控件的index是从最小的空号开始的,而不是你说的从现存的最大号+1开始的。
追问
谢谢,你说的很好。我是初学者,关于空号是我看错了。我还是不明白,我的窗体为什么会达到极限,我不可能有那么多的控件,我画了不少线段(线段算控件吗?),但也不会达到极限。
追答
一个窗体可以最多放255个控件(窗体本身也是控件,合起来是256个);
另外控件数组不管里面有多少个子元素,都是只算一个控件的(所以你那个Label控件数组实际上只算一个控件的);
你画的线段如果用的是Line控件(在控件窗口点击Line后再在窗口中画出来)那就算控件,一条线段就是一个控件,解决方法有两种:1、把这些线段做成一个控件数组(原因见上面第二点);2、在运行时用Line语句实时画出线段(建议用这种方法,比较灵活简便,而且即使画几千几万条线也和控件数量无关);
你的窗体种可能放了一些没用到的无用控件(有可能放在窗口的可见范围之外所以没看见),你可以在属性窗口的下拉框看看究竟有那些控件,有多少控件。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
方法有很多,简单的类似新建窗体(一个窗体大约能有255个控件)
通用的是建立控件数组,这是比较适合你的,控件数组的话大约能有几千几万,看你的内存。
通用的是建立控件数组,这是比较适合你的,控件数组的话大约能有几千几万,看你的内存。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一般情况下是不会出现这情况,不知道你是什么情况下需要这么多控件
笔者以前也遇到过,笔者是用直线控件画棋盘,后来笔者就用VB语句动态画棋盘
如果只是为了修饰用的,那就用画,用语句画的只能在程序运行时才能看到
希望回答对你有帮助
笔者以前也遇到过,笔者是用直线控件画棋盘,后来笔者就用VB语句动态画棋盘
如果只是为了修饰用的,那就用画,用语句画的只能在程序运行时才能看到
希望回答对你有帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那只能说明你太牛了,微软都满足不了你的要求了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询