解决 如何在GroupBox控件中引用ComBox

已加入
2020年9月14日
留言内容
11
编程经验
5-10
大家好,

我正在尝试使用组框引用显示组合框文本值。

溴甲烷1在名为GroupBox6的组框内,当我尝试运行下一段代码时,出现“引用null”错误:

1600444333817.png


我的代码如下:
C#:
GroupBox GroupBox6 = new System.Windows.Forms.GroupBox();

                        for (int i = 1; i <= 9; i++)
                        {

                            MessageBox.Show(GroupBox6.Controls ["CmbR" + i].Text);

                        }
我在GroupBox6中有一组从CmbR1到CmbR9的组合框。

任何帮助,将不胜感激。

亲切的问候,

弗朗西斯科·姆茨(Francisco Mtz。
 

附件

  • 1600444297505.png
    1600444297505.png
    268.1 KB · Views: 8
  • 1600444458918.png
    1600444458918.png
    1.1 KB · Views: 8
由主持人最后编辑:
已加入
2020年9月14日
留言内容
11
编程经验
5-10
大家好,

这是我正在做的另一项测试:

int i = 1;
MessageBox.Show(Convert.ToString(i)); --> Shows 1
MessageBox.Show(CmbR1.Text); -->显示空白空间,即CmbR1.Text的值
MessageBox.Show(GroupBox6.Controls ["CmbR"+ Convert.ToString(i).Text); -->我在空引用中遇到错误

我在Visual Basic中有一个类似的代码,它按预期工作:

VB.NET:
For i = 1 To 14
            如果GroupBox6.Controls("CmbR" &CInt(i))。Text = GroupBox1.Controls("txbCom11" & CInt(i)).Text Then
                contador_aciertos_1 = contador_aciertos_1 + 1
                GroupBox1.Controls("txbCom11" &CInt(i))。BackColor = Color.Sienna
            Else
                GroupBox1.Controls("txbCom11" &CInt(i))。BackColor = Color.NavajoWhite
            End If
Next
提前致谢。

亲切的问候,

弗朗西斯科·姆茨(Francisco Mtz。
 
由主持人最后编辑:

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
On your VB code, show us how you got GroupBox6.

In C# code in post #1, you are getting a null exception error because your GroupBox6 is a newly constructed control on line #1. It obvously won't have any child controls. Why would you expect it to if it is brand new and never been populated?
 
已加入
2020年9月14日
留言内容
11
编程经验
5-10
On your VB code, show us how you got GroupBox6.

In C# code in post #1, you are getting a null exception error because your GroupBox6 is a newly constructed control on line #1. It obvously won't have any child controls. Why would you expect it to if it is brand new and never been populated?

谢谢跳伞运动员,非常感谢您的回复。

有什么方法可以在此容器(GroupBox6)中获取combox文本值吗?

在Visual Basic中,我只有以下代码:

如果GroupBox6.Controls("CmbR" &CInt(i))。Text = GroupBox1.Controls("txbCom11" & CInt(i)).Text Then
contador_aciertos_1 = contador_aciertos_1 + 1
GroupBox1.Controls("txbCom11" &CInt(i))。BackColor = Color.Sienna
别的
GroupBox1.Controls("txbCom11" &CInt(i))。BackColor = Color.NavajoWhite
万一

我只是C#的新手,试图使Visual C#代码以与Visual Basic相同的方式工作。

提前致谢。

亲切的问候,

弗朗西斯科·姆茨(Francisco Mtz。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
您在WinForms实现中分配给包含CmbR1的组框的名称是什么?它应该以完全相同的方式工作。张贴在Form1.Designer.cs文件中找到的代码。
 
已加入
2020年9月14日
留言内容
11
编程经验
5-10
嗨,大家好,

我正在上传Designer代码文件。

如何在帖子中使用代码标签?

提前致谢。

亲切的问候,

弗朗西斯科·姆茨(Francisco Mtz。
 

附件

  • 2Fijos_7Dobles_Designer.zip
    38.3 KB · Views: 7
已加入
2020年9月14日
留言内容
11
编程经验
5-10
我可以在设计器文件中看到以下内容:

C#:
this.GroupBox6.Controls.Add(this.CmbR1);

因此,此ComboBox的定义存在于GroupBox6内部。

亲切的问候,

弗朗西斯科·姆茨(Francisco Mtz。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
Yes, it exists in the form's instance of the GroupBox that was instantiated on line 610:
屏幕截图_1.png


但是在帖子#1中的代码中,您将在行#1上创建GroupBox的新实例,然后尝试搜索该新实例。您应该搜索表单上的实例。

因此,要修复第1条中的代码,只需删除第1行(假设第1条中的其余代码都位于表单中)。
 
已加入
2020年9月14日
留言内容
11
编程经验
5-10
Yes, it exists in the form's instance of the GroupBox that was instantiated on line 610:
查看附件1099

但是在帖子#1中的代码中,您将在行#1上创建GroupBox的新实例,然后尝试搜索该新实例。您应该搜索表单上的实例。

因此,要修复第1条中的代码,只需删除第1行(假设第1条中的其余代码都位于表单中)。

嗨跳伞者,

非常感谢您的帮助。

现在可以正常工作了,我只是删除了新的参考,错误不再更多。

我将继续验证此表格。

提前致谢。

亲切的问候,

弗朗西斯科·姆茨(Francisco Mtz。
 

羊皮

退休程序员
已加入
2018年9月5日
留言内容
1,982
地点
英国
编程经验
10+
很高兴你把事情解决了。使用对象引用时要特别小心,尤其是那些在本地定义的对象引用以及在方法中使用new关键字重新定义的对象引用等。我将为您标记为已解决。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
顺便说一句,当窗体上有687个控件时,您可能需要认真考虑实现用户控件或重新访问UI设计。
 
最佳 底部