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

时间:2015-02-20 13:30:53

标签: c# arrays user-interface reference

我对C#很陌生并且有一个小项目要扩展。代码是一团糟,我试图以某种方式改进它,但似乎达到了语言的某些限制。

基本上我正在读取最多四个传感器的传感器值,并在标签中显示一些传感器值。由于循环始终是相同的,我想迭代而不是用不同的GUI元素重写相同的代码四次以存储值。我的研究表明我可以手动将我的标签放在一个数组中,但Visual Studio编辑器将覆盖每次我在GUI中更改任何内容时都会这样。所以我的方法是创建一个对

等元素的引用数组
ref GroupBox[] gbChannel;

但是在C#中是不可能的。如果我尝试直接分配

gbChannel[0] = gbChannel0;

C#告诉我在执行此操作之前必须检查对象是否为null。反正,

if(gbChannel1!=null) gbChannel[0] = gbChannel0;

导致相同的结果。

有没有方便的方法来实现我想做的事情?

4 个答案:

答案 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;

GroupBoxreference 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等事件处理程序