Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 通过子控件引用窗体上的控件';s参数_Vb.net - Fatal编程技术网

Vb.net 通过子控件引用窗体上的控件';s参数

Vb.net 通过子控件引用窗体上的控件';s参数,vb.net,Vb.net,对于VisualBasic类的最后一个项目,我正在制作一个Windows窗体版本的战舰(我称之为“NavalQuest”:p)。每个玩家的棋盘都有一个表格,我有一个.vb文件用于公共共享信息。在这个文件中,我有一个名为“Place”的公共共享子文件,在放置船只时调用它。以下是我必须领导的小组: Public Shared Sub Place(ByRef form As Form, ByRef board(,) As PictureBox, ByRef picbox As PictureBox)

对于VisualBasic类的最后一个项目,我正在制作一个Windows窗体版本的战舰(我称之为“NavalQuest”:p)。每个玩家的棋盘都有一个表格,我有一个.vb文件用于公共共享信息。在这个文件中,我有一个名为“Place”的公共共享子文件,在放置船只时调用它。以下是我必须领导的小组:

Public Shared Sub Place(ByRef form As Form, ByRef board(,) As PictureBox, ByRef picbox As PictureBox)
其中,“form”是从中调用Sub的形式(p1或p2),“board(,),”是实际board的图片框的2D数组,以及“picbox”,用户希望在其上放置相关船舶的图片框

用户选择“水平”或“垂直”单选按钮,该按钮与船的方向一致。子系统将检查单击的是哪一个。这就是为什么我有一个“form”参数来引用单选按钮所在的表单,因为我不能直接从global.vb文件中引用它。但是,当计算机读取:

form.radhoriz.checked
在我尝试运行之前,它会出错,因为“radhoriz”显然不是Windows.System.Forms.Form的属性。它不明白我要的是窗体上的控件,而不是窗体本身的属性。即使我在“radhoriz”的每个表单上创建一个属性,错误仍然存在,因为“radhoriz”将是“p1board”和“p2board”(表单名称)的属性,而不是Windows.System.Forms.form

我尝试将参数的数据类型更改为一个对象。没有出现任何蓝色的错误行,所以我运行了应用程序。运行时错误的原因与以前相同

这有什么办法吗?我想我可以为我引用的表单的所有控件添加参数,但这是唯一的方法吗?谢谢你的帮助


-Ryan

忽略了这是一个可怕的整体设计。。。 *不过,这并不意外,因为你是一名学生

在您的参数签名中

更改:

ByRef form As Form
致:

其中“frmName”是玩家棋盘表格的名称


另外,将所有ByRef都更改为ByVal。

您可能应该更改应用程序名称的拼写,以免一些毫无戒心的用户认为他们在探索肚脐。令人尴尬的拼写错误已修复:)哦,忘了表单名称会变成它自己的对象类型!谢谢是的,我只是把它当作ByRef,因为我不确定我是否会在表格上做任何更改。出于好奇,有什么更好的设计?设计是我整体lol中最薄弱的一点,希望在这方面有所改进!实际上,请注意,这种方法实际上不起作用,因为Sub是从两种不同的形式调用的…因此从玩家二的形式调用它将检查玩家一的形式上的单选按钮,反之亦然…更好的方法是将游戏表示和逻辑与UI分离。创建一个类来保存游戏的状态,然后针对该状态调用方法。表单只显示当前状态。至于最后一个问题,有几种方法。(1) 使窗体实现一个接口,然后将类型更改为该接口;(2) 使用Controls.Find()搜索具有正确名称的控件;(3) 使用反射来访问控件。我现在只想使用controls.Find()函数,如果我有足够的时间,可能会考虑升级设计哈哈…非常感谢!
ByRef form As frmName