我试图根据组合框的信息调用函数。用户将更改组合框,在此过程中,我们根据与固定文本连接的组合框文本中的数据调用函数。我正在尝试这样做,因此每次获得新版本时,我只需添加一个文件夹,而不必像在 case 语句中那样进入代码添加新函数名称。组合框的文本为v6.1v6.4 v7.2v8.6等等我想要调用的函数名为 Getinfo_,并添加了组合框中的文本,扩展名为 . 替换为 _ 例如,我会从组合框中选择 v6.1,这样做时我会调用名为 Getinfo_v6_1 的函数经过大量的思考、搜索和尝试,我已经接近但还不够接近。我想我需要使用反射(也许不需要)并且private void cmbobx_version_SelectedIndexChanged(object sender, EventArgs e){ Type t = this.GetType(); //need to get the type MethodInfo method = t.GetMethod("Getinfo" + cmbobx_version.Text.Replace('.', '_')); //put together function name method.Invoke(this, new object[] {Fridge, "Order" }); //call function with parameters}不幸的是,这在调用时停止,说该方法为 NULL,我不明白为什么会这样,除了也许我完全误解了我在做什么。我想调用的函数看起来有点像下面的public void Getinfo_v6_1(ComboBox inFocusComboBox, string action){ switch (inFocusComboBox.Text) { case "Red": Price = 11254; break; case "Blue": Price = 11278; break; case "Green": Price = 11354; break; }}public void Getinfo_v6_4(ComboBox inFocusComboBox, string action){ switch (inFocusComboBox.Text) { case "Red": Price = 254; break; case "Blue": Price = 278; break; case "Green": Price = 354; break; }}即使您有更好的方法来做我需要做的事情,我们也非常感谢您的所有帮助。
2 回答
芜湖不芜
TA贡献1796条经验 获得超7个赞
我确实错过了下划线,在使用它时我没有注意到,因为我还进行了文本替换。并认为这一切都是正确的。即使在调试时我没有看到它,通常我们也看不到明显的东西,这就是为什么那些比我聪明的人的第二意见总是好的。
现在的工作代码如下。
private void cmbobx_version_SelectedIndexChanged(object sender, EventArgs e)
{
Type t = this.GetType(); //need to get the type
MethodInfo method = t.GetMethod("Getinfo_" + cmbobx_version.Text.Replace('.', '_')); //put together function name
method.Invoke(this, new object[] {Fridge, "Order" }); //call function with parameters
}
请务必小心,因为这些函数将没有引用,但它会编译并运行。当您调用正确的函数时,这一切都会在运行时起作用。
- 2 回答
- 0 关注
- 97 浏览
添加回答
举报
0/150
提交
取消