如何将一个函数的运行结果作为另一函数输入,解决brep不存在当前上下文报错
问题原因
报错是典型的变量作用域问题:你在btnSelectBuilding_Click_1方法内声明的brep是局部变量,作用域仅局限在该方法内部,另一个按钮的点击事件btnCalculate_Click不属于这个作用域,因此无法访问到这个变量。
修复步骤
- 第一步:在两个按钮事件所属的窗体类的成员层级,声明一个
Rhino.Geometry.Brep类型的成员变量,用来持久存储选中的几何形体。 - 第二步:在选择建筑的点击事件中,将选中的
brep赋值给这个类成员变量,而非仅定义局部变量。 - 第三步:在计算按钮的点击事件中,读取该类成员变量作为参数传入即可,建议增加非空校验避免空引用异常。
完整修改代码示例
1. 声明类成员变量
// 写在窗体类内部、所有方法的外部 private Rhino.Geometry.Brep _selectedBuildingBrep;
2. 修改选择建筑按钮点击事件
private void btnSelectBuilding_Click_1(object sender, EventArgs e) { MyFunctions.SelectBuildingGeometry(out Rhino.Geometry.Brep brep); // 将选中的几何赋值给类成员变量 _selectedBuildingBrep = brep; }
3. 修改计算按钮点击事件
private void btnCalculate_Click(object sender, EventArgs e) { // 非空校验,避免未选择几何就点击计算引发异常 if(_selectedBuildingBrep == null) { MessageBox.Show("请先选择建筑几何形体"); return; } MyFunctions.EvaluateGeometry(_selectedBuildingBrep); }
可选优化
你当前的SelectBuildingGeometry方法同时使用out参数和返回值返回同一个brep对象,逻辑冗余,可以简化为仅用返回值的写法:
// 优化后的工具方法 public static Brep SelectBuildingGeometry() { Brep brep; // ...原有选择几何的逻辑不变... return brep; } // 对应简化的选择按钮事件 private void btnSelectBuilding_Click_1(object sender, EventArgs e) { _selectedBuildingBrep = MyFunctions.SelectBuildingGeometry(); }
内容的提问来源于stack exchange,提问作者NHQue
相关产品推荐
相关产品推荐

