Non sapendo come hai creato la Tabella, io ho ipotizzato due liste contenenti i nomi dei Padri (come : Menu, Help, ecc..) e i nome dei figli (come : Crea File, Trova File, Esci, ecc..) , cosi sono facili da riempire utilizzando il metodo .add() di una lista.
Brevemente la spiegazione :
Realizzare in maniera dinamica a tempo di esecuzione dell'applicazione/form il caricamento del menu :
Cosa Otteniamo con il nostro codice:
Menu
--->Crea File
--->Trova File
--->Esci
Help
Devi aggiungere nella lista elencoPadriMenu tutte le voci del menu, esempio se vogliamo aggiungere "Inserisci" basta che inserisci elencoPadriMenu.Add(new Nodo("&Inserisci",true));
Cosi ottengo :
Menu
--->Crea File
--->Trova File
--->Esci
Help
Inserisci
Se ora vogliamo inserire un sotto menu al Menu Padre "Inserisci" basta modificare il codice in questa maniera :
elencoPadriMenu.Add(new Nodo("&Inserisci","Sotto Menu",true));
Cosi Ottengo :
Menu
--->Crea File
--->Trova File
--->Esci
Help
Inserisci
--->Sotto Menu
Se invece vuoi inserire un elenco di sotto menu ad un specifico elemento ("Inserisci") devi creare una Lista di tipo stringa esempio :
List<String> elencoFigliMenu = new List<string>();
//Creio i figli
elencoFigliMenu.Add("&Sotto Menu 1");
elencoFigliMenu.Add("&Sotto Menu 2");
elencoFigliMenu.Add("&Sotto Menu 3");
//Collego il Padre al Figli
elencoPadriMenu.Add(new Nodo("&Inserisci",elencoFigliMenu,true));
Menu
--->Crea File
--->Trova File
--->Esci
Help
Inserisci
--->Sotto Menu 1
--->Sotto Menu 2
--->Sotto Menu 3
Ecco un esempio di codice :
Creare la classe Nodo.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PersonalizzaMenuTable
{
public class Nodo
{
private string keyNodoPadre;
private List<String> nodiFigli;
private Boolean visibilitaNodo;
public Nodo() {
this.keyNodoPadre = null;
this.nodiFigli = new List<string>();
this.visibilitaNodo = true;
}
public Nodo(string keyNodoPadre, List<String> nodiFigli, Boolean visibilitaNodo)
{
this.keyNodoPadre = keyNodoPadre;
this.nodiFigli = nodiFigli;
this.visibilitaNodo = visibilitaNodo;
}
public Nodo(string keyNodoPadre, Boolean visibilitaNodo)
{
this.keyNodoPadre = keyNodoPadre;
if (this.nodiFigli == null)
this.nodiFigli = new List<string>();
this.visibilitaNodo = visibilitaNodo;
}
public Nodo(string keyNodoPadre, String nodoFiglo, Boolean visibilitaNodo)
{
this.keyNodoPadre = keyNodoPadre;
if (this.nodiFigli == null)
this.nodiFigli = new List<string>();
this.nodiFigli.Add(nodoFiglo);
this.visibilitaNodo = visibilitaNodo;
}
public string getKeyNodoPadre()
{
return this.keyNodoPadre;
}
public void setKeyNodoPadre(string newKeyNodoPadre)
{
this.keyNodoPadre = newKeyNodoPadre;
}
public List<String> getNodiFigli()
{
return this.nodiFigli.ToList();
}
public void setNodiFigli(List<String> newNodiFigli)
{
this.nodiFigli = newNodiFigli;
}
public Boolean getVisibilitaNodo()
{
return this.visibilitaNodo;
}
public void setVisibilitaNodo(Boolean newVisibilitaNodo)
{
this.visibilitaNodo = newVisibilitaNodo;
}
public Boolean addNodoFiglio(String nodoFiglio)
{
if (this.nodiFigli == null)
this.nodiFigli = new List<String>();
if (this.nodiFigli.Contains(nodoFiglio) == false)
this.nodiFigli.Add(nodoFiglio);
return true;
}
public Boolean cercaFiglio(String nomeFiglio)
{
if (this.nodiFigli == null)
this.nodiFigli = new List<string>();
return ( this.nodiFigli.Contains(nomeFiglio));
}
}
}
Ricorda che, accettare la risposta è un modo di ringraziare chi ci ha aiutato ed evidenziare che il problema è stato risolto.
Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.alpacasrl.it