一小段错误代码求解决

城一直在 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;
}
}
}
}


错误信息为: 未将对象引用设置到对象的实例。求解答,谢谢
...全文
494 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)
内容概要:本文围绕列车-轨道-桥梁耦合系统交互动力学行为的仿真研究展开,基于Matlab代码实现多体系统动力学建模与数值解,旨在深入分析列车运行过程中轨道与桥梁之间的相互作用关系及其动态响应特性。研究内容涵盖系统动力学建模方法、轮轨接触力计算、运动方程的离散化处理、时域仿真算法设计及仿真结果的可视化展示。通过构建简化的车-轨-桥耦合动力学模型,模拟列车行驶引起的结构振动传递规律,进一步评估轨道与桥梁结构在动态荷载作用下的安全性、稳定性和耐久性。文中提供了完整的Matlab实现代码,便于读者复现仿真过程并开展参数敏感性分析与模型优化。; 适合人群:具备一定理论力学、结构动力学基础及Matlab编程能力,从事轨道交通工程、土木工程、车辆动力学或结构健康监测等相关领域研究的研究生、科研人员及高校教师;工作年限1-3年、希望深入掌握复杂耦合系统建模仿真技术的工程技术人员。; 使用场景及目标:①掌握列车-轨道-桥梁系统动力学建模的核心原理与实现流程;②学习利用Matlab进行多体耦合系统时域仿真与动态响应分析的方法;③为轨道结构优化设计、桥梁疲劳寿命评估、减振降噪技术研究及高速铁路安全运营提供仿真支撑;④作为科研课题、学位论文撰写或高水平期刊论文复现的技术参考与代码基础。; 阅读建议:建议读者结合文中提供的Matlab代码逐模块调试运行,重点关注质量-刚度-阻尼矩阵的组装、轮轨相互作用力的建模、时间积分算法(如Newmark-β法)的实现细节,以及数据后处理与动画可视化方法。可尝试调整车辆速度、轨道不平顺激励、桥梁刚度等参数,观察系统动态响应的变化,从而深化对车-轨-桥耦合机制的理解。

111,130

社区成员

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

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

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