Menu auto editable.

Signaler
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009
-
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009
-
Bonjour Monsieur,

J'actualise la position de selection dans un menu avec l'évènement Click, et je vois pas comment ajouter dynamiquement d'autres items qui feraient pareil. (je remplace l'item par une textbox pour pouvoir l'éditer et j'ai besoin de savoir lequel). Y aurait-il moyen de déterminer autrement l'item selectionné du menuStrip ?

15 réponses

Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Je n'arrive pas à retrouver mes items dans la collection de controles. Pas moyen d'appliquer un algorythme classique: Les classes de bases sont tellement encapsulées qu'il reste plus que d'appliquer bêtement la méthode des évênements. C'est tellement plus facile quand c'est long et fastidieux. Je comprends tout à coup la réticence des programmeurs vb6 face au progrès: Le nouveau apprentissage consiste à trouver LA façon. Heureusement que ça change souvent.

Ci-joint le code à tout hazard. (Quand même plus facile que d'envoyer un email)
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Module AutoMenu
Class AutoMenu_Ctrl 'Modification des options d'un menu.
Friend Menu_Options As MenuStrip 'Le menu principal
Friend Contexte As New ContextMenuStrip 'Variable externe de type menu
Friend SelectedItem As ToolStripItem 'L'item de menu_Options selectionné.
Friend EdItem As New ToolStripTextBox 'L'éditeur
Friend WithEvents Edition As ToolStripItem
Friend WithEvents Ajout As ToolStripItem
Friend WithEvents Retrait As ToolStripItem
Friend Sub Edite() Handles Edition.Click
Dim indice_position As Integer = Menu_Options.Items.IndexOf(SelectedItem)
Menu_Options.Items.Insert(indice_position, EdItem)
Menu_Options.Items.Remove(SelectedItem)
End Sub
Friend Sub Ajoute() Handles Ajout.Click
End Sub
Friend Sub Retire() Handles Retrait.Click
End Sub
Sub New(ByRef Selecteur As MenuStrip)
Menu_Options = Selecteur
Edition = Contexte.Items.Add("Modifier")
Ajout = Contexte.Items.Add("Ajouter")
Retrait = Contexte.Items.Add("Supprimer")
Selecteur.ContextMenuStrip = Contexte
End Sub 'initialise le Sous-menu
End Class 'contextuel
End Module
'Programme d'essai du module Automenu"
Public Class Form1
Friend MenuOptions As New MenuStrip
Dim Menu_essai As AutoMenu_Ctrl
Dim WithEvents Option_Secteur As ToolStripItem
'Dim Option_Secteur As ToolStripItem
Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Option_Secteur = MenuOptions.Items.Add("Secteur")
Menu_essai = New AutoMenu_Ctrl(MenuOptions)
Controls.Add(MenuOptions)
'initialise le menu
Option_Secteur = MenuOptions.Items.Item(0)
SetItemIndex()
End Sub
Sub SetItemIndex() Handles Option_Secteur.Click
Menu_essai.SelectedItem = Option_Secteur
End Sub
End Class
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Compte tenu des difficultés pour allouer dynamiquement les évênements, mais fort de cette première approche, Je recommence autrement.

Objet: Selectionner un String dans une collection avec un menu.

On supprimme la participation dynamique de l'utilisateur pour simplifier.

Avec pour inconvénient de re-générer le menu à chaque modification.
Nous savons donc au départ qu'il faudra tout refaire pour optimiser,
Peut-être réclamer des modificationss de l'adressage virtuel (délégués, évênements, ...) du Basic.


On obtient un nouvel Objet: Selectionner un String dans un TreeView.
Un autre inconvénient de cette mauvaise approche c'est qu'on aura du mal à choisir parmi toutes les méthodes de sauvegarde de structures de données. Je note pour pas oublier d'enregistrer à l'aide de la Function ToStr (Cle As String, Data As String) As String qui retourne "<Cle>" & Data & "</Cle>". On étudiera les sauvegardes de structures dans le sous-projet bakText_xalm


Nous ramenons le problème a deux propositions: aidez-moi si vous en voyez d'autres

1/2 Générer le menu avec le treeView qui répond à Function(TreeView) As Menu

2/2 Déterminer la selection de l'utilisateur.

La première partie semble assez évidente.
Quand on voudra traiter la deuxième partie, on va trouver le même barrage. Retour à la case départ.

Ca m'ennuie de re-encapsuler un objet Framework dans un autre rien que pour actualiser un nombre entier d'autant qu'il possède déjà une couche d'outils dont j'ai besoin puisqu'on remplace le menuitem par un Toolstriptextbox. Et le noyau d'affichage est même pas vectoriel...



Maix quel Item de ce menu l'utilisateur a-t-il bien pu choisir ?
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

En tant qu'utilisateur, je me sens malmené par tous ces développeurs de codesS. j'aimerais allouer dynamiquement (Editer ajouter retirer) des choix dans un menu. (Je sais, vous allez dire que les EDIs sont faits pour ça, mais je connais vos combines à base de tableau d'adressage virtuels qui permettent par exemple, de multiplier des instances de navigateur (C'est une honte de devoir programmer soi-même le scrolling, mais le ScrollControlUser est peut être équivalent au Scroller de la console.)
En bref, le système de développement Windows est fait pour développer des applications avec un contexte bien défini par le programmeur et si on a l'audace de vouloir Hiérarchiser soi-même ses étiquettes, on doit réserver la mémoire à l'avance.
JE CONTESTE !!!
Je vais enregistrer byRef! toutes les nouvelles instances de mes items de menu dans un treenode, et voir si je peux combiner sans évênements.
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Sub AddRoot(ByVal Nouveau_Choix As String)
'Dim Choix As ToolStripTextBox 'On pourrait simplifier la déclaration, mais je veux être assuré
'Dim Position As New TreeNode With {.Tag = Choix} 'Que le compilateur ne peut pas enregitrer deux fois par valeur
'Choix New ToolStripTextBox With {.Text Nouveau_Choix} 'La nouvelle sélection du menu.
Dim Position As New TreeNode With {.Tag New ToolStripTextBox With {.Text Nouveau_Choix}} 'Pas de chance ...
'Qu'est-ce qu'on sacrifierait pas à la syntaxe ?
Liens.Nodes.Add(Position)
Menu.Items.Add(Position.Tag)
End Sub
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Non seulement on change pas le problème, mais on perd toute la mémoire en redondances (sans compter la perte de performance)

If faudrait suivre pas à pas le développement du menu à partir des actions de la souris.

Windows est l'adaptation d'un système matriciel de fenêtre graphiques et d'un algorythme de développement semi-graphique. On remplacerait la souris par des flèches du clavier ça fonctionnerait mieux.
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

J'ai résolu le truc des évênements dynamiques. J'aurais pas eu de pétard si j'aurais utilisé la vieille classe "Menu" qui était pas mustinherits (StripMenu est génial à utiliser, mais une chinoiserie anglosaxone à développer).
Le galop d'essai est pas gros, mais quelle couche !!! Celà vaut-il la peine de le poster dans les codes? est-ce une astuce? oubien c'est un"Snippet"?


Module AutoMenu
Class Selecteur
Dim WithEvents Choix As ToolStripItem
Sub New(ByRef M As MenuStrip, ByVal Lab As String)
Choix = M.Items.Add(Lab)
End Sub
Sub SetGlobale() Handles Choix.Click
MessageBox.Show( _
"mise à jour variable globale " & Choix.Text)
End Sub
End Class
Class Self
Dim Menu As MenuStrip
Dim Liste As New List(Of Selecteur)
Sub Add(ByVal Libelle As String)
Dim Ici As New Selecteur(Menu, Libelle)
Liste.Add(Ici)
End Sub
Sub New(ByRef M As MenuStrip)
Menu = M
End Sub
End Class
End Module

Public Class Form1
Dim Menu_Principal As New MenuStrip
Dim AutoMenu As New Self(Menu_Principal)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Text = "Allocation dynamique des évênements de rubique d'un menu"
Controls.Add(Menu_Principal)
AutoMenu.Add(" Item N° 1")
AutoMenu.Add(" Item N° 2")
End Sub
End Class

Reste plus qu'à gérer le mode édition et remodeler le menu contextuel du "toolStripTextBox".
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Et maintenant, mon Ordi est complètement déréglé : Quand j'ajoute un item (Option Add du menu contextuel du menu principal) celui-ci s'ajoute au menu contextuel...
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Pourquoi les collections d'items s'appellent parfois dropdown ou autocomplete? Je salue les difficultés du travail en équipe. (On trouve Vista à 10% du prix, mais pas en Francais... C'est comme la synthèse vocale.. et tout le monde préfère un bon provider que le outlook qui semble vouloir dire "va voir ailleurs")

Si Quelqu'un savait comment on change le menu contextuel du toolstriptextbox, je serais pas obligé de gérer un mode particulier pour la saisie et un autre pour la selection: On resterait en mode de saisie du moment qu'on touche pas au clavier c'est idem.
Faire un menu contextuel pour passer en modification d'edition alors qu'il suffirait de rien faire et compliquer l'utilisation ?!

Et si je trouvais un moyen de me débarasser définitivement des messages de notifications d'absence de ressources au démarrage, j'aurais plus besoin de formater.
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

A l'attention des investisseurs qui m'auraient suivi sur ce forum.

Oubliez Microsoft et fuyez vite !!!

Le controle de ma machine est tel que je ne peux même pas renommer mes dossiers sans authorisation (scan online oblige). J'ai déconnecté ma machine de développement en attendant de trouver une solution.

Ce serait un bug de sécurité.
http://windowsteamblog.com/blogs/windowsvista/archive/2007/01/29/working-with-offline-files.aspx?PageIndex=10

Accepter de cocher la licence signifie-il inconditionnellement ?
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

A l'attention des investisseurs qui m'auraient suivi sur ce Forum

Fuyez Windows

Je dois demander l'authorisation, et faire un Scan online pour modifier le nom du plus important de mes dossiers.

Il s'agirait d'un Bug
http://windowsteamblog.com/blogs/windowsvista/archive/2007/01/29/working-with-offline-files.aspx?PageIndex=10
J'ai déconnecté ma machine de développement.

Cocher la license signifie-t-il inconditionnellement ?
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Je suis désolé pour les répétitions, mais mon message était inaccessible.
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Et ne vous fiez pas au lien microsoft que j'ai fourni: il a peut-être déjà été modifié: Le premier rôle des surveillants de sites est de veiller à l'impact des publicités. Même ici que CodesSources semble ouvert à tous les sujets de l'informatique, on est pollué par des effaceurs semi-professionnels interessés à la pub. (le programmeur est toujours suspect, et si la censure limite le vocabulaire, elle n'interdit pas de penser sans les mots "Bon D. de M." de Stephen Clarke !!! Black Swan).
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

Excusez, Le pauvre Microsoft n'y est pour rien: il comble comme il peut les insuffisances de base du basic de la machine avec des produits comme outlook qui permet de gérer l'ordinateur comme un pro de la com.
Un jour viendra que les constructeurs intègreront les communications dans une puce spécialisée (comme l'afffichage), et qu'on pourra gérer une base de données d'adresse publique en toute intimité en basic.
En attendant, je suis bien content de mon Yahoo, que je laisse (qui me permet de laisser) tout le réseau aux spécialistes sinon j'aurais perdu tous mes contacts chaque fois que j'oublie de sauvegarder la boite à lettres quand je formate.

PS Je sais pas si, quand que j'ai la flemme de taper "que je" pour économiser des frappes d'expression litéraire désuette redondante que tout le monde comprend malgré son absence dans de nombreuses autres langues grace au contexte excuser la longueur de la phrase,
Je reprends.
Je sais pas si le fait d'utiliser "que je" pour raccourcir les phrases, et donc faire, en quelque sorte , du SMS : Je sais pas si c'est sujet de censure sur CodesSources.
Que la toute puissante académie universelle conduise une de ses métropoles sur le chemin des langues mortes signifie-t-elle que le Francais désire imposer des secrets Universitaires?
Exercice sémantique: on remplace un mot censuré par un autre. (Oh My God! Quelle mue...)
Messages postés
298
Date d'inscription
jeudi 22 janvier 2009
Statut
Membre
Dernière intervention
26 septembre 2009

J'ai vu qu'on passe au 7, mais j'en ai marre des mises à jours: il faudra Bientôt des millions de pixels si on peut pas réduire le bandeau des fenêtres. Il faudrait interdire les grands écrans aux décideurs de conception microsoft.