if (rb.Text == strtxt)-》  if (rb!=null && rb.Text == strtxt){
    
}

解决方案 »

  1.   


    谢谢,不是!如果Panel控件不用变量代替,直接用控件名可以通过。例如   foreach (Control ctrl in panl1.Controls)
      

  2.   


    谢谢,不是!如果Panel控件不用变量代替,直接用控件名可以通过。例如   foreach (Control ctrl in panl1.Controls)Panel panel = this.Controls.OfType<Panel>().Where(p => p.Name = "").SingleOrDefault();try
      

  3.   


    谢谢,不是!如果Panel控件不用变量代替,直接用控件名可以通过。例如   foreach (Control ctrl in panl1.Controls)Panel panel = this.Controls.OfType<Panel>().Where(p => p.Name = "").SingleOrDefault();try谢谢,看不太懂啊,p 是哪儿来的?
      

  4.   


    看了一下,oc 没有取到值,为null;下面的方法好像不正确
    Panel oc = (Panel)Controls[radioname];  
      

  5.   


    谢谢,不是!如果Panel控件不用变量代替,直接用控件名可以通过。例如   foreach (Control ctrl in panl1.Controls)Panel panel = this.Controls.OfType<Panel>().Where(p => p.Name = "").SingleOrDefault();try谢谢,看不太懂啊,p 是哪儿来的?
    http://msdn.microsoft.com/zh-cn/library/bb397676.aspx
      

  6.   

    名称     /        值    /      类型
    (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
      

  7.   

    Panel oc = (Panel)Controls[radioname];   
    不用想肯定是这句了有问题。
    一般 出现这种问题  都是  从 FORM 或者 Controls取值出错。
      

  8.   

    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;
                }
            }
        }
    }
      

  9.   


    看了一下,oc 没有取到值,为null;下面的方法好像不正确
    Panel oc = (Panel)Controls[radioname];  传值要传Panel的Name才行,不然会取不到Panel,看这命名方式,是不是传成别的控件名了?
      

  10.   


    看了一下,oc 没有取到值,为null;下面的方法好像不正确
    Panel oc = (Panel)Controls[radioname];  传值要传Panel的Name才行,不然会取不到Panel,看这命名方式,是不是传成别的控件名了?不会的,radioname 就是要获取的控件名称,不用变量,直接用此控件名就没问题。
      

  11.   

    radio如果在panel上就要用panl1.Controls,直接用Controls肯定取不到,不明白去看下Form.Designer.cs里怎么添加控件就明白了
      

  12.   

     Panel oc = (Panel)Controls[radioname];
    Panel oc = Controls[radioname] as Panel;
    if(oc!=null)
    {
    //...
    }
      

  13.   

    radio如果在panel上就要用panl1.Controls,直接用Controls肯定取不到,不明白去看下Form.Designer.cs里怎么添加控件就明白了radioname 只是乱写的变量名Panel oc = (Panel)Controls[radioname]; 是取Panel控件,和radiobutton没关联
      

  14.   


    谢谢,这个方法我试过了,也取不到Panel的值!
      

  15.   


    谢谢,这个方法我试过了,也取不到Panel的值!我这个只能说是可以解决“未将对象引用到对象实例”的错误,你没有取到Panel的值是你的方法不正确,Winform里边看看有没有FindControl方法取值的
      

  16.   


    谢谢,这个方法我试过了,也取不到Panel的值!我这个只能说是可以解决“未将对象引用到对象实例”的错误,你没有取到Panel的值是你的方法不正确,Winform里边看看有没有FindControl方法取值的WinForm中可以使用这个函数?
      

  17.   

    你妹明白我说的,我说的意思是无论什么控件你都得去它的容器的里才能取到控件对象,Controls是什么,是Forms.Controls,如果没有执行Controls.Add,你再怎么取也取不到你要的panel,所以让你去design里查看到底是哪个控件的Controls里add你要的panel
      

  18.   


    Panel oc = (Panel)Controls[radioname];应该是这行代码出了问题?
    Controls[radioname] 可能不是 panel, 转换的结果是 null
      

  19.   

    谢谢各位,问题已解决,panel 是在 groupbox 下,所以无法取到。
      

  20.   

    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;
                }
            }
        }
    }