Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
数组中的c#用户界面元素_C#_Arrays_User Interface_Reference - Fatal编程技术网

数组中的c#用户界面元素

数组中的c#用户界面元素,c#,arrays,user-interface,reference,C#,Arrays,User Interface,Reference,我对C#很陌生,有一个小项目要扩展。代码乱七八糟,我试图以某种方式加以改进,但似乎达到了语言的某些极限 基本上,我从最多四个传感器中读取传感器值,并在标签中显示其中的一些。因为循环总是相同的,所以我想迭代,而不是用不同的GUI元素将相同的代码重写四次,以存储值。我的研究表明,我可以手动将标签放入数组中,但每当我更改GUI中的任何内容时,VisualStudio编辑器都会覆盖此内容。所以我的方法是创建一个对元素的引用数组,比如 ref GroupBox[] gbChannel; ref Gro

我对C#很陌生,有一个小项目要扩展。代码乱七八糟,我试图以某种方式加以改进,但似乎达到了语言的某些极限

基本上,我从最多四个传感器中读取传感器值,并在标签中显示其中的一些。因为循环总是相同的,所以我想迭代,而不是用不同的GUI元素将相同的代码重写四次,以存储值。我的研究表明,我可以手动将标签放入数组中,但每当我更改GUI中的任何内容时,VisualStudio编辑器都会覆盖此内容。所以我的方法是创建一个对元素的引用数组,比如

ref GroupBox[] gbChannel;
 ref GroupBox[] gbChannel;
但这在C#中是不可能的。如果我尝试直接分配它

gbChannel[0] = gbChannel0;
C#通知我在执行此操作之前必须检查对象是否为null。不管怎样

if(gbChannel1!=null) gbChannel[0] = gbChannel0;
结果也是一样的


有什么方便的方法可以实现我想要做的吗?

我想你必须初始化你的数组

GroupBox[] gbChannel = new GroupBox[x];

如果您不确定大小,您可以有一个通用列表,如:

List<Groupbox> gbChannels = new List<Groupbox>();
List gbChannels=new List();

然后只需使用gbGhannels添加每个元素。为您迭代的每个标签添加,我很想看到更多的实现代码。看起来您没有正确初始化阵列。。。有几种方法可以做到这一点。如果您知道阵列的大小,Galma88已经提到了一个

GroupBox[] gbChannel = new GroupBox[x];
另一种方式是:

GroupBox[] gbChannel = {gbChannel0, gbChannel1, gbChannel2, gbChannel3};
这大部分取决于所涉及变量的范围。ozidom的帖子也是一个好主意,因为泛型也可以非常灵活

所以我的方法是创建一个对元素的引用数组,比如

ref GroupBox[] gbChannel;
 ref GroupBox[] gbChannel;
GroupBox
是一个,您已经有了一个引用数组。只允许指示应通过引用传递方法的参数。很少需要它,因为大多数函数都应该设计为输出值,而不是改变输入

如果我尝试直接分配它

gbChannel[0] = gbChannel0; 
C#通知我必须检查 执行此操作之前,对象为null

这是因为你还没有一个数组-你只有一个可以保存数组的变量。您必须使用
new
创建数组:

gbChannel = new GroupBox[4];
也可以使用数组初始值设定项:

gbChannel = new [] {gbChannel0, gbChannel1, gbChannel2, gbChannel3};
每当我在列表中更改任何内容时,VisualStudio编辑器都将覆盖此内容


那你就找错地方了。您可能正在将代码添加到
InitializeComponent
,这是为设计者保留的,用于放入与放置在其中的UI元素相关的代码。如果(gbChannel1!=null)gbChannel[0]=gbChannel0,则将代码添加到事件处理程序中,如设计器不会接触的
Form\u Load
-gbChannel1只是一个打字错误,还是你的实际代码看起来一样?无意冒犯,但我认为你已经达到了你的C#知识的极限,而不是语言的极限。如果您发布更多的代码,并详细说明您遇到的问题,我相信我们会有所帮助。我猜您正在使用WinForms并将代码放入设计器生成的
InitializeComponent
方法中。其中一个注释是“不要使用代码编辑器修改此方法的内容”。另外,使用
列表,而不是数组。我认为这是OP的最小问题。而且一个
列表
无论如何都会比一个数组好得多。当然,一个列表会比一个数组好!