2011-10-02 48 views
-1

我想通過這些循環和使用反射來得到我的MDI形式的值的每個ToolStripMenuItem如下:的GetValue反射

FieldInfo[] menuitems = GetType().GetFields(BindingFlags.GetField | 
    BindingFlags.NonPublic | BindingFlags.Instance); 
foreach (var item in menuitems) 
    if (item.FieldType.Equals(typeof(ToolStripMenuItem))) 
     MessageBox.Show(
     item.FieldType.GetProperty("Tag").GetValue(item, null).ToString());   

,但我得到「對象不匹配目標類型」的錯誤,我很困惑並且不知道要指定哪個對象作爲要獲取其值的源對象。

請引導我通過... 在此先感謝您。

+0

這不是一個很好的使用進行反思。 – Rob

回答

1

使用類似GetProperty("Tag").GetGetMethod().Invoke (item, null).ToString()的東西。

+0

我已經試過但沒有新的信息 – bobby

+1

您提供的信息是不夠的......涉及哪些類型以及哪些方法是這部分的? – Yahia

5

這不是反射的情況。

要獲得菜單項,您應該首先獲取對ToolStrip的引用,然後重複其Controls集合。然後

代碼會是這個樣子:

foreach(Control ctrl in _myToolStrip.Controls) 
{ 
    MessageBox.Show(ctrl.Tag); 
} 
+0

在這種情況下,我無法遍歷所有具有特定標記值的孩子,因爲在MDI表單中有一個名爲「MDIFMenuStrip – bobby

+0

@bobby的MenuStrip:如果您首先沒有對菜單條的引用,那麼您應該通過遍歷更高級別的Controls集合來獲得它(MDI主窗口的Controls集合,拿起控件的正確類型或名稱的位置) –

+0

是否更清晰和更挑剔地使用反射?可以嗎?幫助我使用反射? – bobby