我对C#很陌生并且有一个小项目要扩展。代码是一团糟,我试图以某种方式改进它,但似乎达到了语言的某些限制。
基本上我正在读取最多四个传感器的传感器值,并在标签中显示一些传感器值。由于循环始终是相同的,我想迭代而不是用不同的GUI元素重写相同的代码四次以存储值。我的研究表明我可以手动将我的标签放在一个数组中,但Visual Studio编辑器将覆盖每次我在GUI中更改任何内容时都会这样。所以我的方法是创建一个对
等元素的引用数组ref GroupBox[] gbChannel;
但是在C#中是不可能的。如果我尝试直接分配
gbChannel[0] = gbChannel0;
C#告诉我在执行此操作之前必须检查对象是否为null。反正,
if(gbChannel1!=null) gbChannel[0] = gbChannel0;
导致相同的结果。
有没有方便的方法来实现我想做的事情?
答案 0 :(得分:0)
我认为你必须初始化你的数组;
GroupBox[] gbChannel = new GroupBox[x];
答案 1 :(得分:0)
如果您不确定尺寸,可以使用以下通用列表:
List<Groupbox> gbChannels = new List<Groupbox>();
然后只需使用gbGhannels.Add
为每个迭代的标签添加每个元素
答案 2 :(得分:0)
我很想看到更多的实现代码。看起来你没有正确初始化你的数组......有几种方法可以做到这一点。如果您知道阵列的大小,Galma88就会提到一个。
GroupBox[] gbChannel = new GroupBox[x];
另一种方式如下:
GroupBox[] gbChannel = {gbChannel0, gbChannel1, gbChannel2, gbChannel3};
这大部分取决于所涉及变量的范围。 ozidom的帖子也是一个好主意,因为泛型也可以非常灵活。
答案 3 :(得分:0)
所以我的方法是创建一个对
等元素的引用数组ref GroupBox[] gbChannel;
GroupBox
是reference type,您已经拥有一系列参考文献。 ref
keyword仅允许指示方法的参数应通过引用传递 。它很少 ,因为大多数函数应设计为输出值,而不是 mutate 输入。
如果我尝试直接分配
gbChannel[0] = gbChannel0;
C#通知我,我必须检查一下 在执行此操作之前,object为null。
那是因为你还没有数组 - 你只有一个可以持有一个数组的变量。你必须用new
创建数组:
gbChannel = new GroupBox[4];
或者您可以使用数组初始值设定项:
gbChannel = new [] {gbChannel0, gbChannel1, gbChannel2, gbChannel3};
每次我更改GU
中的任何内容时,Visual Studio编辑器都会覆盖它
然后你在错误的地方做这件事。您可能正在将代码添加到InitializeComponent
,这是为设计人员保留的代码,用于放置与放置在那里的UI元素相对应的代码。将代码添加到设计师不会触及的Form_Load
等事件处理程序