2014-03-01 39 views
0

使用VS設計器,我創建了一個窗口(Form1)與幾個單選按鈕。從另一個類來看,如果檢查單選按鈕,我會嘗試執行一條語句。使用radiobutton.Checked在另一個類(問題與靜態/非靜態的東西)

public static string printRailType() 
    { 
     if (Form1.rb60E1.Checked) 
     { 
      return "60E1"; 
     } 

     else if (Form1.rb49E1.Checked) 
     { 
      return "49E1"; 
     } 
     else 
     { 
      return "Rail type not selected."; 
     } 

不過,我有它的問題,這似乎是一個錯誤:

An object reference is required for the non-static field, method, or property 'RailCalc.Form1.rb60E1' Same for Form1.rb49E1.

所以,要解決這些錯誤,我創建了Form1的一個實例:

public static string printRailType() 
    { 
     Form1 frm1 = new Form1(); 
     if (frm1.rb60E1.Checked) 
     { 
      return "60E1"; 
     } 

     else if (frm1.rb49E1.Checked) 
     { 
      return "49E1"; 
     } 
     else 
     { 
      return "Rail type not selected."; 
     } 
    } 

但是,即使選擇了單選按鈕,它仍會打印未選擇鐵軌類型。

看起來frm1是類Form1的一個實例,但它被創建並重置(沒有選定的單選按鈕)。

我該如何解決這個問題?

+0

我沒有全部用C#不太好,但你有一個'static'方法,並在那裏你試圖訪問一個「非靜態」字段或屬性。 – user959631

回答

0

它以另一種方式工作,關鍵字是事件,在你的情況下它是CheckedChanged

所以,你必須處理它,並把代碼中的處理程序:

if (this.rb60E1.Checked) 
    { 
     return "60E1"; 
    } 

    else if (this.rb49E1.Checked) 
    { 
     return "49E1"; 
    } 
    else 
    { 
     return "Rail type not selected."; 
    } 
+0

感謝您的回覆,但我不太明白在哪裏放置此代碼。我寫的 – Dandry

+0

,關鍵字是CheckedChanged事件,甚至給你鏈接,其中包含描述和示例。告訴我們你試過的東西 – VladL

+0

好吧,這似乎是一個非常原始的想法,但我的工作方式如下:我在Form1中創建了一個名爲RailType的字符串變量,並使用CheckedChanged事件將其設置爲值60E1或49E1,否則字符串是空的。 然後我做了一個名爲getRailType的公共方法,它返回這個字符串,我在Calc類中使用它。 它正在工作,但我非常懷疑這是一個專業的方式來這樣做。 – Dandry

-1

這是因爲您爲修復錯誤而修改的新Form1是一種全新的表單,而不是單擊單選按鈕的表單。您必須在某處以某種方式向Form1提供對該類的引用,可能是在您創建該類的地方。