Puntatori a funzioni in VBNET

mercoledì 27 settembre 2006 - 01.47

Xinner Profilo | Newbie

Salve,

ho un combobox che espone una serie di voci (ricavate da una proprietà di un array di una

classe), ciascuna delle quali, quando cliccata, deve richiamare una funzione diversa.
Di sicuro, potrei utilizzare una struttura select case end, di fatto abbinando a ciascun item

del combobox la relativa funzione: ma la soluzione mi pare assai poco elegante: ad es.

Select case Combo.SelectedIndex

case 0
fx1()

case 1
fx2()
end select

Vorrei, piuttosto, prevedere, nella classe di cui espongo i valori della proprietà tramite il

combobox, un'altra proprietà che abbia, in definitiva, come parametro, un puntatore a funzione e che mi consenta

di risolvere il problema con una sintassi del tipo:


MyClass(Combo.SelectedIndex).Invoke

Il concetto mi sembra avere a che fare con i delegate, ma, in definitiva, non so che pesci

prendere.
Qualcuno mi può dare una mano?
Grazie.
F.

Cteniza Profilo | Guru

In c#
private object EseguiMetodo(object pObject, string pMetodo, object[] pParams)
{
// Creazione di un oggetto "tipo quello passato"
Type objType = pObject.GetType();
// MessageBox.Show(pParams[0].ToString() + " " + pParams.Length.ToString());
// Dichiaro un oggetto MethodInfo per memorizzare le informazioni sul metodo
System.Reflection.MethodInfo objMethodInfo;
// Get the MethodInfo for the current class. Binding Flags are specified to get the
// public and private Methods of this class. WhenPublic or Non-Public is specified
// in the BindingFlags, it is also necessary to specify Static or Instance

objMethodInfo = objType.GetMethod(pMetodo, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
return objMethodInfo.Invoke(pObject, pParams);
}
Esempio di chiamata:
string sValue = this.cmbMetodo.SelectedValue.ToString();
object[] sParam = new object[1];
sParam[0] = (object) this.txtParam.Text;
if ( sValue != "")
EseguiMetodo(this,sValue,sParam);

Xinner Profilo | Newbie

Grazie!
Appena posso lo converto in VB e lo provo.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5