我試圖根據組合框的信息調用函數。用戶將更改組合框,在此過程中,我們根據與固定文本連接的組合框文本中的數據調用函數。我正在嘗試這樣做,因此每次獲得新版本時,我只需添加一個文件夾,而不必像在 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 關注
- 141 瀏覽
添加回答
舉報
0/150
提交
取消