2012-04-11 72 views
0

我有一個關於如何使用可調用的方法名稱進行配置的問題。 如從VB.NET中使用的XML中讀取的可配置方法調用

1.I有三個要素看像這樣的xml文件:

<?xml version="1.0" encoding="iso-8859-1"?> 
<root> 
    <element attribute1="a" attribute2="b" attribute3="Send" /> 
</root> 

2.我用一個列表(我做了一類具有三個元素,創造一個對象類型列表類)來存儲xml文件中的元素。使用For語句

3.Then:對於每個元素作爲班級名冊中的GetList 我想從XML文件調用配置的方法來代替:Theoratically

代替SendWait的我想有attribute3的值(該值是SendWait)被調用。

,而不是SendKeys.SendWait( 「{ENTER}」) 是這樣的:

SendKeys.element.Thirdelement()("{ENTER}") 
  • element.Thirdelement()的值是SendWait

我知道attribute3可能有2個值:發送或Sendwait 我應該使用if語句,還是有任何解決方案可用?

If element.ThirdElement() = "SendWait" Then 
           SendKeys.SendWait("{ENTER}") 
          Else 
           SendKeys.Send("{ENTER}") 

我是編程新手,所以請原諒,如果上面的聲明是一個畸變!

LE: 我有一個新的類ListClass1具有三個成員和屬性:

firstElement() 
secondElement() 
thirdElement() 

我爲了存儲從XML文件中的數據

<?xml version="1.0" encoding="iso-8859-1"?> 
<root> 
<element attribute1="a" attribute2="b" attribute3="Send" /> 
</root> 

所以之後使用這個類我將值添加到列表中,例如:element.ThirdElement()將具有來自attribute3(「Send」)的值。 另外element.secondElement()將保留來自attribute2等的值。

回答

0

您可以使用反射來完成任務。首先定義一個類牽着你的方法:

Public Class MethodsToExecute 
    Public Sub Send(par1) 
     SendKeys.Send("{ENTER}") 
    End Sub 
    Public Sub SendWait(par1) 
     SendKeys.SendWait("{ENTER}") 
    End Sub 
End Class 

然後創建用於處理子:

Public Shared Sub ExecuteMethodByName(ObjectToInvoke As Object, MethodName As String, ParamArray Parameters() As Object) 
    Dim m As Reflection.MethodInfo = ObjectToInvoke.GetType.GetMethod(MethodName) 
    m.Invoke(ObjectToInvoke, Parameters) 
End Sub 

現在執行

dim mte as new MethodsToExecute 

迭代徹底的XML文件,並做

ExecuteMethodByName(mte,element.ThirdElement(), element.firsElement(),element.secondElement()) 

問題是t帽子解決方案依賴於屬性順序而不是它們的名字,但是更廣泛的反射用法也可以處理它。 ParamArray Example

可以理解嗎?

+0

感謝您的回答,但老實說,我不明白如何實施,在我的情況下...我有這個短語= SendKeys.SendWait(「{ENTER}」,需要有SendKeys.element.Thirdelement()( 「{ENTER}」) – Operagust 2012-04-12 07:24:49

+0

我做了一些編輯,但我可能不明白你的代碼什麼是ThirdElement?你能添加更多的代碼嗎? – IvanH 2012-04-12 10:19:56

+0

謝謝我在主帖中提供了一些細節(來自LE) – Operagust 2012-04-12 11:48:25