一小段错误代码求解决

城一直在 2014-12-08 03:18:09

private void setRadio(string strtxt,string radioname){
Panel oc = (Panel)Controls[radioname];
foreach (Control ctrl in oc.Controls){
if (ctrl is RadioButton) {
RadioButton rb = ctrl as RadioButton;
if (rb.Text == strtxt){
rb.Checked = true;
break;
}
}
}
}


错误信息为: 未将对象引用设置到对象的实例。求解答,谢谢
...全文
463 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
城一直在 2014-12-14
  • 打赏
  • 举报
回复
引用 28 楼 SmileSkyNet 的回复:
Panel oc = (Panel)groupbox1.Controls[radioname];? 为什么不直接把panel用在这里?或是写成:

private void setRadio(string strtxt,Panel p){
    foreach (Control ctrl in p.Controls){
        if (ctrl is RadioButton) {
            RadioButton rb = ctrl as RadioButton;
            if (rb.Text == strtxt){
                rb.Checked = true;
                break;
            }
        }
    }
}
谢谢,您的方法很简练。学习了。
SmileSkyNet 2014-12-12
  • 打赏
  • 举报
回复
Panel oc = (Panel)groupbox1.Controls[radioname];? 为什么不直接把panel用在这里?或是写成:

private void setRadio(string strtxt,Panel p){
    foreach (Control ctrl in p.Controls){
        if (ctrl is RadioButton) {
            RadioButton rb = ctrl as RadioButton;
            if (rb.Text == strtxt){
                rb.Checked = true;
                break;
            }
        }
    }
}
城一直在 2014-12-10
  • 打赏
  • 举报
回复
谢谢各位,问题已解决,panel 是在 groupbox 下,所以无法取到。
阿达King哥 2014-12-09
  • 打赏
  • 举报
回复
利用调试,检测一下是哪个变量出现了空引用错误,然后看看是不是没有实例化这个变量。
qq_24349513 2014-12-09
  • 打赏
  • 举报
回复
最近也在学习当中.
害羞的大叔 2014-12-09
  • 打赏
  • 举报
回复
Controls.find()呢
xdashewan 2014-12-09
  • 打赏
  • 举报
回复
引用 18 楼 msgame 的回复:
Panel oc = (Panel)Controls[radioname]; 是取Panel控件,和radiobutton没关联
你妹明白我说的,我说的意思是无论什么控件你都得去它的容器的里才能取到控件对象,Controls是什么,是Forms.Controls,如果没有执行Controls.Add,你再怎么取也取不到你要的panel,所以让你去design里查看到底是哪个控件的Controls里add你要的panel
江湖的传说 2014-12-09
  • 打赏
  • 举报
回复

Panel oc = (Panel)Controls[radioname];
应该是这行代码出了问题? Controls[radioname] 可能不是 panel, 转换的结果是 null
城一直在 2014-12-08
  • 打赏
  • 举报
回复
引用 20 楼 porenasckx 的回复:
[quote=引用 19 楼 msgame 的回复:] [quote=引用 17 楼 porenasckx 的回复:] Panel oc = (Panel)Controls[radioname];

Panel oc = Controls[radioname] as Panel;
if(oc!=null)
{
//...
}
谢谢,这个方法我试过了,也取不到Panel的值![/quote] 我这个只能说是可以解决“未将对象引用到对象实例”的错误,你没有取到Panel的值是你的方法不正确,Winform里边看看有没有FindControl方法取值的[/quote] WinForm中可以使用这个函数?
E次奥 2014-12-08
  • 打赏
  • 举报
回复
引用 19 楼 msgame 的回复:
[quote=引用 17 楼 porenasckx 的回复:] Panel oc = (Panel)Controls[radioname];

Panel oc = Controls[radioname] as Panel;
if(oc!=null)
{
//...
}
谢谢,这个方法我试过了,也取不到Panel的值![/quote] 我这个只能说是可以解决“未将对象引用到对象实例”的错误,你没有取到Panel的值是你的方法不正确,Winform里边看看有没有FindControl方法取值的
城一直在 2014-12-08
  • 打赏
  • 举报
回复
引用 17 楼 porenasckx 的回复:
Panel oc = (Panel)Controls[radioname];

Panel oc = Controls[radioname] as Panel;
if(oc!=null)
{
//...
}
谢谢,这个方法我试过了,也取不到Panel的值!
城一直在 2014-12-08
  • 打赏
  • 举报
回复
引用 16 楼 xdashewan 的回复:
[quote=引用 15 楼 msgame 的回复:] 不会的,radioname 就是要获取的控件名称,不用变量,直接用此控件名就没问题。
radio如果在panel上就要用panl1.Controls,直接用Controls肯定取不到,不明白去看下Form.Designer.cs里怎么添加控件就明白了[/quote] radioname 只是乱写的变量名 Panel oc = (Panel)Controls[radioname]; 是取Panel控件,和radiobutton没关联
E次奥 2014-12-08
  • 打赏
  • 举报
回复
Panel oc = (Panel)Controls[radioname];

Panel oc = Controls[radioname] as Panel;
if(oc!=null)
{
//...
}
xdashewan 2014-12-08
  • 打赏
  • 举报
回复
引用 15 楼 msgame 的回复:
不会的,radioname 就是要获取的控件名称,不用变量,直接用此控件名就没问题。
radio如果在panel上就要用panl1.Controls,直接用Controls肯定取不到,不明白去看下Form.Designer.cs里怎么添加控件就明白了
城一直在 2014-12-08
  • 打赏
  • 举报
回复
引用 13 楼 leafmao 的回复:
[quote=引用 8 楼 msgame 的回复:] [quote=引用 6 楼 C_htp 的回复:] 断点看看哪里是null
看了一下,oc 没有取到值,为null; 下面的方法好像不正确 Panel oc = (Panel)Controls[radioname]; [/quote] 传值要传Panel的Name才行,不然会取不到Panel,看这命名方式,是不是传成别的控件名了?[/quote] 不会的,radioname 就是要获取的控件名称,不用变量,直接用此控件名就没问题。
城一直在 2014-12-08
  • 打赏
  • 举报
回复
引用 12 楼 wawd74520 的回复:
private void setRadio(string strtxt,string radioname){
   Panel oc = (Panel)Controls[radioname];
    foreach (Control ctrl in oc.Controls){
        if (ctrl is RadioButton) {
            if (((RadioButton)ctrl).Text == strtxt){
                ((RadioButton)ctrl).Checked = true;
                break;
            }
        }
    }
}
谢谢,不过还是同样的错误!
leafmao 2014-12-08
  • 打赏
  • 举报
回复
引用 8 楼 msgame 的回复:
[quote=引用 6 楼 C_htp 的回复:] 断点看看哪里是null
看了一下,oc 没有取到值,为null; 下面的方法好像不正确 Panel oc = (Panel)Controls[radioname]; [/quote] 传值要传Panel的Name才行,不然会取不到Panel,看这命名方式,是不是传成别的控件名了?
失落的神庙 2014-12-08
  • 打赏
  • 举报
回复
private void setRadio(string strtxt,string radioname){
   Panel oc = (Panel)Controls[radioname];
    foreach (Control ctrl in oc.Controls){
        if (ctrl is RadioButton) {
            if (((RadioButton)ctrl).Text == strtxt){
                ((RadioButton)ctrl).Checked = true;
                break;
            }
        }
    }
}
stormem 2014-12-08
  • 打赏
  • 举报
回复
Panel oc = (Panel)Controls[radioname]; 不用想肯定是这句了有问题。 一般 出现这种问题 都是 从 FORM 或者 Controls取值出错。
城一直在 2014-12-08
  • 打赏
  • 举报
回复
名称 / / 类型 (Panel)Controls[radioname] / null / System.Windows.Forms.Panel Controls / {System.Windows.Forms.Form.ControlCollection} / System.Windows.Forms.Control.ControlCollection {System.Windows.Forms.Form.ControlCollection} Controls[radioname] / null / System.Windows.Forms.Control oc / null / System.Windows.Forms.Panel
加载更多回复(9)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧