Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Main menu dinamico
martedì 02 febbraio 2010 - 17.24
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
mar 2 feb 2010 - 17:24
Ciao a tutti!
Googlando un po' sono riuscito ad abbozzare un primo rozzo tentativo di menu dinamico con voci prese da db.
Riesco a fare la prima fila di voci, ma non ho capito assolutamente come riempire il drop down
non so se sono riuscito a spiegarmi...
Qualcuno mi può gentilmente illustrare? anche in pseudocodice basterebbe
grazie 1000
http://www.myspace.com/madmack1981
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
mar 2 feb 2010 - 17:38
Ciao.
Prima di tutto ti consiglio di inserire nei prossimi messaggi che scriverai su questo forum sia la versione di Visual Studio che utilizzi, sia il linguaggio che hai utilizzato di modo che le risposte possono essere dirette senza poi dover cercare tool di conversione codice.
Io ti rispondo con C#:
supponiamo che il tuo elemento base del menu si chiama 'menu1' e che a questo devi aggiungere al suo interno altri tre menu chiamati 'sub1', 'sub2', 'sub3'.
System.Windows.Forms.ToolStripMenuItem sub1 = new System.Windows.Forms.ToolStripMenuItem();
sub1.Name = "sub1"; qui ci puoi mettere quello che vuoi. Magagi anche un codice univoco di modo che quando gestisci il clic su un generico elemento del menu riesci a sapere su quale hai cliccato
sub1.size = new System.Drawing.Size(152, 22);
//aggiungo il sub1 all'elemento padre 'menu1'
this.menu1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {sub1});
cosi puoi fare con tutti gli elementi.
Poi se ti serve inserire qualcosa all'interno di sub1 basta che rifai le stesse operazioni considerando al posto di 'menu1' l'oggetto 'sub1' e così puoi creare livelli innestati anche all'infinito.
Ciao
Cristian Barca
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
mar 2 feb 2010 - 17:57
Ciao.
Aggiungo altro al mio post.
In generale quando hai problemi di questo tipo puoi fare semplicemente in questo modo: ti crei una form inserendoci dentro il main menu e tutti i suoi sottolivelli. poi vai nel file di designer e vedi il codice che è stato scritto in automatico. Puoi usare questo tipo di approccio anche per altro.
PS. Non vedere la mia risposta come "così la prossima volta vedi di non disturbare gli altri....". E' solo un suggerimento per risparmiare i "tempi di risposta del forum".
Cristian Barca
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
mar 2 feb 2010 - 18:04
Grazie 1000 per la risposta velocisima!!
Quel giro dal designer l'ho fatto , ma probabilmente ero poco lucido quando l'ho fatto perchè non ne ho dedotto nulla..
Ora provo a fare come dici tu e vediamo cosa esce fuori...
Comunque hai ragione, sono stato troppo generico:
VB.NET con VS2005
http://www.myspace.com/madmack1981
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
mer 3 feb 2010 - 09:21
Ciao.
Se usi VB Net devi apportare delle modifiche al mio codice perchè è in C#
a tutti i 'this.' devi sostituire 'me.'
tutte le '[]' vanno sostituite con '()'
le parentesi graffe con le tonde
rimuovi tutti i ; dalla fine delle istruzioni
nella dichiarazione delle variabili
DefinizioneTipo aaa = new DefinizioneTipo() va sostituito con DIM aaa AS DefinizioneTipo = new DefinizioneTipo()
per il resto non dovresti avere problemi
Cristian Barca
gabriel81
Profilo
| Junior Member
194
messaggi | Data Invio:
mer 3 feb 2010 - 12:49
Grazie infinite !
Per coloro che in futuro ne avranno bisogno posto la routine completa.
L'unico limeite per adesso è il livello di annidamento dei menu che per ora è al max 2 (a me basta così!!)
(Christian se cambieresti qcs dimmi pure! nn mi offendo mica!)
Ecco:
Public Sub _CaricaIndirizzario()
Dim _Conn As SqlConnection = _IstanziaConnessioneSQLServer()
Dim _dt As New DataTable
Dim _da As New SqlClient.SqlDataAdapter("SELECT * FROM MENU.INDIRIZZARIO WHERE APPNAME='TEST'", _Conn)
_da.Fill(_dt)
_Conn.close()
Dim _dv_main As New DataView(_dt)
Try
_dv_main.RowFilter = "UNDEROBJ = '*NONE'"
_dv_main.Sort = "PROG ASC"
Catch ex As Exception
MsgBox(ex.Message)
End Try
Dim _dt_main = _dv_main.ToTable()
'MsgBox(_dt.Rows.Count)
'MsgBox(_dt_main.Rows.Count)
If _dv_main.Count > 0 Then
Dim _menu As New MenuStrip
For Each main_row As DataRow In _dt_main.rows
Dim _ms As ToolStripItem
Dim _info As New InfoMenu
_info.PGM = main_row.Item("PGM").ToString
_info.Parent = main_row.Item("UNDEROBJ").ToString
_ms = _menu.Items.Add(main_row.Item("LABEL").ToString, Nothing, New System.EventHandler(AddressOf MMenu_OnClick))
_ms.Tag = _info
Dim _dv_under As New DataView(_dt)
Try
_dv_under.RowFilter = "UNDEROBJ = '" & main_row.Item("CODE").ToString & "'"
_dv_under.Sort = "PROG ASC"
Catch ex As Exception
MsgBox(ex.Message)
End Try
Dim _dt_under As DataTable = _dv_under.ToTable()
For Each under_row As DataRow In _dt_under.Rows
Dim sub1 As New System.Windows.Forms.ToolStripMenuItem()
sub1.Name = under_row.Item("CODE").ToString
sub1.Text = under_row.Item("LABEL").ToString
sub1.Size = New System.Drawing.Size(152, 22)
Dim _ddi As ToolStripDropDownItem = _ms
_ddi.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {sub1})
Next
Me.Controls.Add(_menu)
Next
End If
http://www.myspace.com/madmack1981
Torna su
Stanze Forum
Elenco Threads
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 !