2009-12-07 245 views
0

我有改變鼠標點擊布爾屬性的狀態的代碼,根據點擊的對象的名稱:如何在C#中將對象的名稱作爲參數傳遞給函數?

private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     FrameworkElement feSource = e.Source as FrameworkElement; 
     switch (feSource.Name) 
     { 
      case "r1s1": 
       if (r1s1.IsSelected == false) 
        r1s1.IsSelected = true;     
       else 
        r1s1.IsSelected = false; 
       break; 
      case "r1s2": 
       if (r1s2.IsSelected == false) 
        r1s2.IsSelected = true; 
       else 
        r1s2.IsSelected = false; 
       break; 
      ............. 
     } 
     e.Handled = true; 
    } 

我願做合格的發件人的名稱相同的動作(r1s1,r1s2, ..等等)作爲函數的參數,其中該字符串與屬性名稱(IsSelected)結合以優化代碼。類似的東西(只是想法):

private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     FrameworkElement feSource = e.Source as FrameworkElement; 

     ChangeSelection (feSource.Name) 
    } 


public void ChangeSelection(string name) 
    { 
     if (name.IsSelected == false) 
      name.IsSelected = true; 
     else 
      name.IsSelected = false; 
    } 

請糾正我。我做錯了什麼?

+1

目前尚不清楚實際的「發件人」是否需要切換的複選框/收音機,還是應該選擇單獨的一組對象?如果它是'發件人',那麼你可以簡單地將其轉換爲適當的控件並切換其狀態。 – Groo 2009-12-07 13:59:01

+0

實際「發件人」是具有自定義依賴項屬性「IsSelected」的WPF自定義控件。怎麼樣把它轉換成適當的類型 - 我會深入挖掘一個理論來實現這一點。沒有代碼的例子,我很難理解這種方式 – rem 2009-12-07 14:26:12

+0

已經做到了,在你們所有人的幫助下。非常感謝 – rem 2009-12-07 14:45:31

回答

2

我不是在WPF真棒,但我相信你想要通過feSource改爲ChangeSelection。然後將其轉換爲「真實」類型,使用此CheckBox或任何其他類型,然後修改其上的.IsSelected屬性。

我不知道爲什麼你想通過名稱來做這件事,當你得到真正的對象作爲參數(對象發件人)。

+0

僅僅缺乏C#經驗讓我無法操作更優雅的參數。我需要進一步的學習:) – rem 2009-12-07 14:07:14

+0

謝謝!我已經設法用真實物體完成所有這些,按照您的建議使用投射到我的物體類型。這個很酷。 – rem 2009-12-07 14:44:21

2

您可能只是想將目標引用存儲在每個項目的「tag」屬性中。那麼你不會有所有的魔法字符串傳遞。

+0

我必須這樣研究一下。只是不太熟悉「標籤」功能。不管怎麼說,還是要謝謝你。 – rem 2009-12-07 14:47:31

1

你傳遞給你的函數是一個字符串。所以當你試圖解決name.IsSelected在你的函數中,你正在尋找String.IsSelected方法(是否存在?)

你在哪裏聲明r1s1和r1s3在你的頂級函數?那些是您應該嘗試撥打的對象。已被選中。

而且語法糖評論:

public void ChangeSelection(string name) 
{ 
    // resolve object from name here 
    feObject.IsSelected = ! feObject.IsSelected; 
} 
+0

特別感謝您的語法糖評論。我的變體看起來很醜,現在我明白了:) – rem 2009-12-07 14:16:35

2

您要訪問它的名字控制。以下代碼假設您的控件是「RadioButton」,並且您的代碼位於表單上。

public void ChangeSelection(string name) 
    { 
     if (this.Controls.ContainsKey(name)) 
     { 
      RadioButton radio1 = this.Controls[name] as RadioButton; 
      radio1.IsSelected = !radio1.IsSelected; 
     } 
    } 
+0

感謝您對我的新手問題的直接回答。感謝代碼示例,我真的需要它。我的問題與執行此,我不能清楚確定什麼是我的上下文中的「控件」 - 它給了我不斷的錯誤「..不包含'控件'的定義...」 – rem 2009-12-07 14:13:12

+0

這是WinForm代碼而OP在談論WPF。 – Quibblesome 2009-12-07 14:37:58

相關問題