2013-11-28 42 views
0

我正在用C#WPF編寫應用程序。從類MainForm中使用對象

我在這裏有一個小問題。

在class.cs,我有一句臺詞:

MessageBox.Show("Cancelled sending !"); 

而且我的形式我有一個radioButton1。

我怎樣才能使它像

if (radioButton1.IsChecked == true) 
{ 
    MessageBox.Show("Cancelled sending !"); 
} 

因爲當我嘗試它,它沒有找到radioButton1

我已經嘗試過不同的方法,但我找不到怎麼辦它。

+0

只是爲了確保:我們真的在談論WPF應用程序嗎?如果是這樣,請發佈您的XAML。另外,當你說「class.cs」時,你的意思是class.xaml.cs嗎? – Somedust

+0

不,我的意思是:右鍵單擊您的項目 - >添加 - >新建項目 - > Class1.cs – user2944342

+0

那麼,在這種情況下,您的課程根本不知道單選按鈕的存在。你在嘗試MVVM方法嗎?即class.cs是一個視圖模型嗎? – Somedust

回答

0

如果我理解你是正確的,你正試圖訪問你的class.cs中的radioButton的值,對吧?如果是這樣,你可以創建一個公共屬性,它封裝了你的單選按鈕檢查屬性。

這可以看起來像:

public bool IsRadioButtonChecked 
{ 
    get{return radioButton1.IsChecked;} 
} 

在你class.cs你需要的窗口的一個實例。

+0

WPF RadioButton似乎不公開檢查屬性,只有IsChecked的一個。 – Somedust

+0

對不起。混淆WinForms和WPF – Tomtom

0

您在窗體上創建的單選按鈕存儲在MainForm類的專用變量中。因此,其他類別無法訪問。

您可以將它變成一個公共變量,但這不是一個非常好的方法,並且在任何情況下,當您在窗體上添加/刪除/調整控件大小時,將被Forms設計器覆蓋。

更好的解決方案是將引用傳遞給您的其他類,或者通過構造函數,或者作爲檢查單選按鈕狀態的方法的參數(如果它是由形成)。

例如:

public class MyClass { 
    private mRbutton; 

    public MyClass(RadioButton rbutton) { 
     mRbutton = rbutton; 
     // Rest of the construction code... 
    } 

    // 
    // ... Rest of the class code ... 
    // 

    public void MessageShowingMethod() { 
     if (mRbutton.IsChecked == true) { 
      MessageBox.Show("Cancelled sending !"); 
     } 
    } 
} 
+0

如果他正在做一個Windows窗體項目,這將是正確的。請注意,確定它也能在wpf中工作,但它不符合整個mvvm的事情,是嗎? – hschne

0

也許試試這個。在您的主要形式有:

if (radioButton1.IsChecked == true) 
{ 
    int checked = 1; 
} 

callMyMethod(checked); 

,然後在class.cs:

public callMyMethod(int checked) 
{ 
    if (checked == 1) 
    { 
    MessageBox.Show("Cancelled sending !"); 
    } 
    else 
    { 
    MessageBox.Show("Something else"); 
    } 
} 
0

當使用WPF,我們有WindowUserControl類,等等。這些是部分類,這意味着它們有多個文件。有一個.xaml文件,我們在其中定義UI和.xaml.cs文件後面的代碼,我們可以在其中訪問,該文件名爲我們在相關的.xaml文件中定義的UI元素。 你永遠不應該訪問任何其他類中的UI元素。

要訪問的UI元素在代碼隱藏文件,你必須首先將其命名爲在.xaml文件:

<RadioButton Name="RadioButton" /> 

然後,在代碼隱藏文件只,您可以使用該名稱訪問它:

if (RadioButton.IsChecked) 
{ 
    MessageBox.Show("Cancelled sending !"); 
} 

再次,你應該從來沒有在任何其他類訪問UI元素。