Problème avec le contrôle "ContextMenuStrip" sur MS VisualBasic 2005

Problème avec le contrôle "ContextMenuStrip" sur MS VisualBasic 2005 - VB/VBA/VBS - Programmation

Marsh Posté le 30-06-2006 à 10:28:27    

Bonjour à tous,  :hello:  
 
Je vous situe en gros mon problème:
je développe actuellement une application en VB.NET dans le cadre de mon boulot. J'ai affecté un ContextMenuStrip à un TreeView afin d'effectuer des opérations sur les objets pointés par les noeuds de celui-ci. J'ai également capté le message envoyé par le système lors de la fermeture de ma Form (CloseBox), et je traite celà dans un évènement qui "Hide" ma Form.
Mon problème étant lorsque je fais réapparaitre cette Form : le ContextMenuStrip est toujours accessible mais les ToolStripItems qu'il contient ne sont plus sélectionnables!  :ouch:  (je réactive ma Form grâce à la méthode "ShowDialog()"
Quelqu'un aurait une idée de l'origine de mon problème ?
Merci d'avance,  :jap:


Message édité par les gens roots le 11-07-2006 à 17:43:00
Reply

Marsh Posté le 30-06-2006 à 10:28:27   

Reply

Marsh Posté le 30-06-2006 à 10:49:45    

tu peux nous montrer ton bout de code sur l'initialisation de ta userform stp ? :)

Reply

Marsh Posté le 30-06-2006 à 10:59:27    

Ok voici ma région:
 
#Region " Windows Form Designer generated code "
 
 
 
 
    '######################################################################################
    '###########################                             ##############################
    '###########################  DECLARATION DES ATTRIBUTS  ##############################
    '###########################                             ##############################
    '######################################################################################
 
 
 
 
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '~~~~~~~~~~~~~~~ Attributs Publiques ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 
 
    Public CurrentProj As Project = Nothing
    Public ElectS As New Hashtable
 
 
 
 
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '~~~~~~~~~~~~~~~ Attributs Privés ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 
 
    Private LastRelease As Boolean = False
 
 
 
 
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '~~~~~~~~~~~~~~~ Variables locales ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 
 
    Dim SchemNewWatcher As New System.IO.FileSystemWatcher
    Dim SchemModifWatcher As New System.IO.FileSystemWatcher
    Dim ResultNewWatcher As New System.IO.FileSystemWatcher
    Dim ResultModifWatcher As New System.IO.FileSystemWatcher
    Dim pop As New popup
 
 
 
 
    '######################################################################################
    '#################                                              #######################
    '#################  DECLARATION ET IMPLEMENTATION DES METHODES  #######################
    '#################                                              #######################
    '######################################################################################
 
 
 
 
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '~~~~~~~~~~~~~~~ Constructeur de la fenêtre ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
    Public Sub New()
 
        MyBase.New()
 
        Dim e As Engine
        Dim c As Config
 
        e = e.getInstance()
        c = c.getInstance()
 
        Application.EnableVisualStyles()
        'This call is required by the Windows Form Designer.
        InitializeComponent()
 
        'initialisation composants visuels
 
        'init du TreeView
        TreeView.MultiSelect = True
        TreeView.ContextMenuStrip = Me.ContextMenuStrip
        TreeView.ImageList = Me.ImageList1
        Me.ContextMenuStrip.DropShadowEnabled = True
 
        'init du context menu
        Dim icoDir As String
        Dim image As Image
 
        icoDir = System.Environment.GetEnvironmentVariable("ROOTDIR" ) & "\SmartElectre\System\Bitmaps\"
 
        image = New System.Drawing.Bitmap(icoDir & "Check Out.ico" )
        Me.ContextMenuStrip.Items.Add(c.ReadLang("OpCO", 0), image)
 
        image = New System.Drawing.Bitmap(icoDir & "Check In.ico" )
        Me.ContextMenuStrip.Items.Add(c.ReadLang("OpCI", 0), image)
 
        image = New System.Drawing.Bitmap(icoDir & "ReleaseB.ico" )
        Me.ContextMenuStrip.Items.Add(c.ReadLang("OpR", 0), image)
 
        image = New System.Drawing.Bitmap(icoDir & "New Release.ico" )
        Me.ContextMenuStrip.Items.Add(c.ReadLang("OpNR", 0), image)
 
    End Sub
 
 
 
 
    ' Appel des éléments de la fenêtre
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub
 
 
 
 
    ' Création des composants de la fenêtre (arbre, noeuds, menu click-droit...)
    Private components As System.ComponentModel.IContainer
    Friend WithEvents Button1 As System.Windows.Forms.Button
    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    Friend WithEvents StatusBar1 As System.Windows.Forms.StatusBar
    Friend WithEvents ImageList1 As System.Windows.Forms.ImageList
    Friend WithEvents ImageList2 As System.Windows.Forms.ImageList
    Friend Shadows WithEvents ContextMenuStrip As System.Windows.Forms.ContextMenuStrip
    Friend WithEvents ProgBar As System.Windows.Forms.ProgressBar
    Friend WithEvents TreeView As datTreeView
    Friend WithEvents SchemList As System.Windows.Forms.ListView
    Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader
    Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader
    Friend WithEvents ResultList As System.Windows.Forms.ListView
    Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
    Friend WithEvents Label1 As System.Windows.Forms.Label
    Friend WithEvents Label2 As System.Windows.Forms.Label
    Friend WithEvents Button2 As System.Windows.Forms.Button
    Friend WithEvents Button3 As System.Windows.Forms.Button
    Friend WithEvents Timer1 As System.Windows.Forms.Timer
 
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.components = New System.ComponentModel.Container
        Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(SmartElectre))
        Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components)
        Me.Button1 = New System.Windows.Forms.Button
        Me.TextBox1 = New System.Windows.Forms.TextBox
        Me.StatusBar1 = New System.Windows.Forms.StatusBar
        Me.ImageList2 = New System.Windows.Forms.ImageList(Me.components)
        Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
        Me.ContextMenuStrip = New System.Windows.Forms.ContextMenuStrip(Me.components)
        Me.ProgBar = New System.Windows.Forms.ProgressBar
        Me.TreeView = New datTreeView(Me.components)
        Me.SchemList = New System.Windows.Forms.ListView
        Me.ColumnHeader1 = New System.Windows.Forms.ColumnHeader
        Me.ColumnHeader2 = New System.Windows.Forms.ColumnHeader
        Me.ResultList = New System.Windows.Forms.ListView
        Me.GroupBox1 = New System.Windows.Forms.GroupBox
        Me.Label2 = New System.Windows.Forms.Label
        Me.Label1 = New System.Windows.Forms.Label
        Me.Button2 = New System.Windows.Forms.Button
        Me.Button3 = New System.Windows.Forms.Button
        Me.GroupBox1.SuspendLayout()
        Me.SuspendLayout()
        '
        'ImageList1
        '
        Me.ImageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit
        Me.ImageList1.ImageSize = New System.Drawing.Size(16, 16)
        Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent
        '
        'Button1
        '
        Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.System
        Me.Button1.Location = New System.Drawing.Point(481, 108)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(104, 29)
        Me.Button1.TabIndex = 1
        Me.Button1.Text = "Refresh"
        '
        'TextBox1
        '
        Me.TextBox1.Location = New System.Drawing.Point(408, 32)
        Me.TextBox1.Name = "TextBox1"
        Me.TextBox1.Size = New System.Drawing.Size(248, 20)
        Me.TextBox1.TabIndex = 3
        Me.TextBox1.Text = "Welcome To SmartElectre"
        '
        'StatusBar1
        '
        Me.StatusBar1.Location = New System.Drawing.Point(0, 614)
        Me.StatusBar1.Name = "StatusBar1"
        Me.StatusBar1.Size = New System.Drawing.Size(855, 32)
        Me.StatusBar1.TabIndex = 5
        Me.StatusBar1.Text = "StatusBar1"
        '
        'ImageList2
        '
        Me.ImageList2.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit
        Me.ImageList2.ImageSize = New System.Drawing.Size(16, 16)
        Me.ImageList2.TransparentColor = System.Drawing.Color.Transparent
        '
        'Timer1
        '
        Me.Timer1.Enabled = True
        Me.Timer1.Interval = 60000
        '
        'ContextMenuStrip
        '
        Me.ContextMenuStrip.Name = "ContextMenuStrip"
        Me.ContextMenuStrip.Size = New System.Drawing.Size(61, 4)
        '
        'ProgBar
        '
        Me.ProgBar.Location = New System.Drawing.Point(408, 66)
        Me.ProgBar.Name = "ProgBar"
        Me.ProgBar.Size = New System.Drawing.Size(247, 19)
        Me.ProgBar.TabIndex = 7
        '
        'TreeView
        '
        Me.TreeView.Location = New System.Drawing.Point(5, 5)
        Me.TreeView.MultiSelect = True
        Me.TreeView.Name = "TreeView"
        Me.TreeView.Size = New System.Drawing.Size(370, 605)
        Me.TreeView.TabIndex = 8
        '
        'SchemList
        '
        Me.SchemList.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2})
        Me.SchemList.Location = New System.Drawing.Point(6, 19)
        Me.SchemList.Name = "SchemList"
        Me.SchemList.Size = New System.Drawing.Size(210, 103)
        Me.SchemList.TabIndex = 9
        Me.SchemList.UseCompatibleStateImageBehavior = False
        Me.SchemList.View = System.Windows.Forms.View.List
        '
        'ColumnHeader1
        '
        Me.ColumnHeader1.Text = "Folio"
        '
        'ColumnHeader2
        '
        Me.ColumnHeader2.Text = "Sub Product"
        '
        'ResultList
        '
        Me.ResultList.Location = New System.Drawing.Point(245, 19)
        Me.ResultList.Name = "ResultList"
        Me.ResultList.Size = New System.Drawing.Size(217, 102)
        Me.ResultList.TabIndex = 10
        Me.ResultList.UseCompatibleStateImageBehavior = False
        Me.ResultList.View = System.Windows.Forms.View.List
        '
        'GroupBox1
        '
        Me.GroupBox1.Controls.Add(Me.Label2)
        Me.GroupBox1.Controls.Add(Me.Label1)
        Me.GroupBox1.Controls.Add(Me.ResultList)
        Me.GroupBox1.Controls.Add(Me.SchemList)
        Me.GroupBox1.FlatStyle = System.Windows.Forms.FlatStyle.System
        Me.GroupBox1.Location = New System.Drawing.Point(387, 470)
        Me.GroupBox1.Name = "GroupBox1"
        Me.GroupBox1.Size = New System.Drawing.Size(468, 144)
        Me.GroupBox1.TabIndex = 11
        Me.GroupBox1.TabStop = False
        Me.GroupBox1.Text = "Modified Files"
        '
        'Label2
        '
        Me.Label2.AutoSize = True
        Me.Label2.Location = New System.Drawing.Point(242, 124)
        Me.Label2.Name = "Label2"
        Me.Label2.Size = New System.Drawing.Size(72, 13)
        Me.Label2.TabIndex = 12
        Me.Label2.Text = "Sous Produits"
        '
        'Label1
        '
        Me.Label1.AutoSize = True
        Me.Label1.Location = New System.Drawing.Point(3, 124)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(34, 13)
        Me.Label1.TabIndex = 11
        Me.Label1.Text = "Folios"
        '
        'Button2
        '
        Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.System
        Me.Button2.Location = New System.Drawing.Point(481, 178)
        Me.Button2.Name = "Button2"
        Me.Button2.Size = New System.Drawing.Size(103, 32)
        Me.Button2.TabIndex = 12
        Me.Button2.Text = "Save"
        Me.Button2.UseVisualStyleBackColor = True
        '
        'Button3
        '
        Me.Button3.FlatStyle = System.Windows.Forms.FlatStyle.System
        Me.Button3.Location = New System.Drawing.Point(481, 246)
        Me.Button3.Name = "Button3"
        Me.Button3.Size = New System.Drawing.Size(103, 33)
        Me.Button3.TabIndex = 13
        Me.Button3.Text = "Save As"
        Me.Button3.UseVisualStyleBackColor = True
        '
        'SmartElectre
        '
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit
        Me.AutoScroll = True
        Me.ClientSize = New System.Drawing.Size(865, 643)
        Me.Controls.Add(Me.Button3)
        Me.Controls.Add(Me.Button2)
        Me.Controls.Add(Me.GroupBox1)
        Me.Controls.Add(Me.TreeView)
        Me.Controls.Add(Me.ProgBar)
        Me.Controls.Add(Me.StatusBar1)
        Me.Controls.Add(Me.TextBox1)
        Me.Controls.Add(Me.Button1)
        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D
        Me.Icon = CType(resources.GetObject("$this.Icon" ), System.Drawing.Icon)
        Me.KeyPreview = True
        Me.MaximizeBox = False
        Me.MinimizeBox = False
        Me.Name = "SmartElectre"
        Me.ShowInTaskbar = False
        Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
        Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
        Me.TopMost = True
        Me.GroupBox1.ResumeLayout(False)
        Me.GroupBox1.PerformLayout()
        Me.ResumeLayout(False)
        Me.PerformLayout()
 
    End Sub
 
#End Region
 
Si jamais vous avez besoin d'autres bouts de code faites-moi en part.

Reply

Marsh Posté le 30-06-2006 à 13:10:49    

Une réponse ou une ébauche de réponse serait la bienvenue ^^.

Reply

Marsh Posté le 30-06-2006 à 15:52:12    

up :jap:

Reply

Marsh Posté le 03-07-2006 à 10:40:51    

J'espère que ce week end vous aura plus inspiré que moi...
J'ai toujours ce problème et toujours pas de réponse de votre part 8'(.
Si quelqu'un a une idée, qu'il se lance plz ^^
:jap:

Reply

Marsh Posté le 04-07-2006 à 11:43:29    

Need help ! :'(
up plz!!!

Reply

Marsh Posté le 04-07-2006 à 11:47:28    

en passant par la fonction .show à la place de showdialogue pitetre ?

Reply

Marsh Posté le 04-07-2006 à 11:58:38    

Désolé, je ne connais que VB6. Dans cette version, il existe la propriété "Enabled" qu'on peut passer à True ou False. Peut-être qu'il existe un équivalent dand VB.Net, au niveau des ToolStripItems?


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

Marsh Posté le 04-07-2006 à 12:32:02    

Alors quelques petites précisions sur mon code et VB.NET en général:
_ Shodialog() consiste à afficher une Form modale, ce qui est nécessaire pour mon programme.
_ La propriété "Enabled" permet la sélection des MenuItems.
  Mon problème étant que je vois ces "MenuItems" sous forme "Enabled" donc sélectionnables, mais que la sélection ne marche plus: plus de surbrillance lorsque la souris passe dessus, sélection impossible. J'ai bien entendu essayé ces différentes méthodes au cas ou mais sans résultats 8'(.
 
D'autres suggestions ? :jap:


Message édité par les gens roots le 04-07-2006 à 12:32:58
Reply

Marsh Posté le 04-07-2006 à 12:32:02   

Reply

Marsh Posté le 04-07-2006 à 13:39:35    

Lorsque la form réapparait, le code est-il terminé? Est-ce seulement le menu contextuel qui ne marche plus? Les autres contrôles sont-ils opérationnels?
 
Il faudrait tester en réduisant la fenêtre (barre des tâches) plutôt qu'en la cachant, pour voir si c'est le fait de cacher qui bloque.


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

Marsh Posté le 04-07-2006 à 13:57:08    

En effet, seul le contextmenu ne fonctionne plus, tous les autres contrôles que j'utilise: Treeview, Listview, buttons, Textbox... fonctionnent.
Effectivement le fait de réduire "seulement" la Form n'a pas de conséquences sur le contrôle ContextMenu. Je pourrai bien entendu utiliser cette solution à ceci près qu'elle n'est pas envisageable dans le cahier des charges...
J'ai également testé le champ "Visible" de ma Form. Le résultat étant le même que pour la méthode "Hide".
Enfin pour répondre à ta première question, le code n'est pas terminé losque la Form réapparait car c'est seulement lors de la fermeture de toutes les Form(s) de mon appli que le programme s'achève. Ce problème est donc plutôt embêtant quand à l'utilisation du prog...
J'espère que tu as une idée pour me sauver :bounce: .

Reply

Marsh Posté le 04-07-2006 à 14:06:55    

Ah, j'oubliais de préciser une chose: les items de mon ContextMenuStrip ne sont plus sélectionnables une fois ma Form "Hide" puis "Show" (sous forme modale), cependant, la gestion des droits sur les opérations reste effective. En effet, suivant quel noeud de mon arbre je sélectionne, j' "Enable" différents ContextMenuItems. Ceci fonctionne toujours, malgrès le fait que ces "Items" ne sont plus sélectionnables.
Etrange non °.O¿;,

Reply

Marsh Posté le 04-07-2006 à 14:15:45    

Malheureusement, comme je l'ai dit, je ne connais pas VB.Net. Il faudrait écrire (en 2 coups de cuiller à pot) un nouveau prog. avec juste un contrôle, un menu contextuel associé, sur une feuille modale, et faire un hide/show pour voir si le problème est dû à ton appli ou à VB.Net, pour orienter les recherches.


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

Marsh Posté le 04-07-2006 à 15:21:40    

Alors je viens de faire un petit test comme me l'a conseillé JihemAir, résultat: ça fonctionne. Cependant, j'ai utilisé l'ajout manuel de "ToolStripItems" (contrôle apparu sous MS VisualStudio 2005 Express si je ne dis pas de bétises), alors que j'ajoute mes items par code dans mon appli. Je ne pense pas que le problème viens de là mais sait on jamais...
Voici mon ajout d'items:
 
Me.ContextMenuStrip.Items.Add(c.ReadLang("OpCO", 0), image)
 
Comme vous pouvez le remarquer, j'ajoute des items avec des images qui leurs sont liés, serai-ce le problème?? Encore une fois ça m'étonnerai mais bon... :bounce:
 
Apparemment ça serait mon traitement qui n'est pas correct mais je ne vois vraiment pas quoi oO.
Quelqu'un aurait-il une idée??? :jap:

Reply

Marsh Posté le 04-07-2006 à 15:30:07    

Ben moi, à ta place, juste après le ShowDialog, je virerai les ContexMenuStrip pour les ajouter aussitôt après, histoire de reconstruire tout ça. C'est pas très propre mais bon...


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

Marsh Posté le 04-07-2006 à 15:54:31    

Après 2-3 tests j'ai crû que tout était résolu, mais j'ai quand même voulu traquer la fonction "Hide"=>"ShowDialog" suivie de la re-création du ContextMenu. Et là, bonne nouvelle! Après quelques essais, je n'ai plus du tout de ContextMenu ='(((((
Une dernière précision, le "ShowDialog" ne plaisant parfois pas a mon appli, je l'ai mis dans un Try. Le Catch ne fait tout bonnement rien.
Donc voilà, je suis un peu dépité... Si quelqu'un a une autre suggestion? :jap:

Reply

Marsh Posté le 04-07-2006 à 17:17:54    

J'ai une autre technique que ShowDialog pour forcer une fenêtre à rester au 1er plan. Il faut passer par les API's de Windows. Ce n'est pas très simple, mais ça marche. (tested and approved).  
 
Si ça t'intérresse, demain je te file les sources. (Faut que j'y vais là).


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

Marsh Posté le 04-07-2006 à 17:29:30    

Hmm le but de la méthode ShowDialog n'est pas de faire apparaitre ma fenêtre au premier plan, mais de la rendre modale: c'est à dire que je bloque l'exécution de ma procédure appelante tant qu'elle est ouverte. L'attribut "TopMost" de ma Form me permet déjà de faire apparaitre ma Form au premier plan de facon permanente.
Mais merci quand même pour ton aide, bonne soirée :bounce:

Reply

Marsh Posté le 06-07-2006 à 08:56:01    

Bonjour à tous.
Une nouvelle journée commence sous le signe de la pluie 8( et de la victoire de l'équipe de france hier soir (dont je me fout royalement :bounce:). Mais ceci n'est pas le sujet de ce topic. Et oui, comme vous pouvez vous en douter mon problème persiste et je commence à désespérer ;o.
J'invite donc l'élite de la nation en termes de programmation à s'interresser à mon sujet :jap:.
Dans une optique d'éclaircissement de la chose, je vais "essayer" de vous montrer un joli screen avant/après. Si je dis essayer c'est que je ne sais pas encore trop comment ça marche pour afficher des img sur ce forum. Je pense pas que sa soit bien dur.
To be continued...
http://wizardspike.dyndns.org/korn/ContextMenuBefore.jpg
http://wizardspike.dyndns.org/korn/ContextMenuAfter.jpg
Voilou en fait c'est pas bien compliqué ^_^.
J'espère que celà a permis d'éclairer la laterne de certains sur ce sujet.
Si quelqu'un a une idée, une suggestion... :jap:


Message édité par les gens roots le 06-07-2006 à 09:49:41
Reply

Marsh Posté le 06-07-2006 à 17:05:31    

up (''o)o  
    o(o'')


Message édité par les gens roots le 06-07-2006 à 17:06:05
Reply

Marsh Posté le 06-07-2006 à 17:18:38    

et si tu ajoutais  en fin de fonction de traitement, avant ou après ton hide d'imposer une sélection possible de tes toolsitems.

Reply

Marsh Posté le 06-07-2006 à 17:25:22    

J'aimerai bien mais je ne connais pas de méthode "miracle" qui me permette de faire celà...

Reply

Marsh Posté le 06-07-2006 à 17:29:44    

Quand la fenêtre est "Hide", est-elle tjs modale? Parce qu'il y a peut-être une incompatibilité. Je veux dire qu'il faut la rendre non modale et non "premier plan" quand tu la caches...


---------------
J'ai un message.."Cliquez OK pour continuer."...Qu'est ce que je fais ?
Reply

Marsh Posté le 06-07-2006 à 17:33:30    

En effet losque je "Hide" ma fenêtre, elle n'est plus modale.
J'avoue que je ne comprends pas bien ta dernière phrase JihemAir: pour moi quand je cache ma fenêtre elle n'est plus en "TopMost" ou premier plan, vu qu'elle n'est plus apparente à l'écran ni dans la barre de tâches.
Je pense aussi qu'il dois y avoir une incompatibilité, le seul problème étant que le fait de rapeller ma fenêtre en tant que Form modale est le seul moyen que j'ai trouvé pour la faire ré-apparaitre...

Reply

Marsh Posté le 06-07-2006 à 21:40:10    

Ce que je voulais dire, c'est que ça parait évident pour un esprit humain qu'une fenêtre cachée ne peut pas être modale ou "TopMost", mais que d'un point de vue programme, ça ne pose sans doute pas de problème.
<mode conditionnel on>
 Si tu essayais de passer la fenêtre en mode non "TopMost" avant de la cacher??? C'est pitoyable, mais je ne sais pas quoi te conseiller d'autre...
</mode conditionnel on>

Reply

Marsh Posté le 07-07-2006 à 09:37:40    

Tu imagine bien que je ne m'amuse pas à tester ma fenêtre en la rendant "TopMost" car c'est relativement gênant si jamais mon programme plante => Form dvt l'appli MSVisualStudio...
Donc oui c'est déjà testé et ça ne marche pas 8'(

Reply

Marsh Posté le 07-07-2006 à 13:06:13    

Bon alors récapitulons mon problème:
Les items du "ContextMenuStrip" de mon appli sont insélectionnables après un "Hide" et un "ShowDialog" de ma Form.
Après quelques tests je me suis apperçu que si je le recréée après mon "ShowDialog" il n'apparait plus...
Si j'utilise la méthode "Show" à le place de "ShowDialog" (Show = fenêtre non modale), la form ne s'affiche plus, mais le Thread de mon appli continue de tourner, donc elle n'est pas plantée.
Au niveau du ContextMenu, toutes les méthodes d'affichage que j'ai pu trouver: "PerformLayout", "ResumeLayout", "Refresh", etc... n'ont aucun effet sur celui-ci.
J'invite donc les personnes ayant quelque idée que ce soit à ce sujet à me donner un coup de main ou ne serai-ce que de me donner quelques pistes à explorer. Merci d'avance :jap:

Reply

Marsh Posté le 10-07-2006 à 09:30:47    

Bonjour à tous. Je vais un peu déborder du sujet pour intruduire un autre GROS problème dans mon appli dû au fait de "Hide/Showdialog" ma Form: les COM objects chargés dans la structure de mes objets définis en .NET sont perdus suite à cette exécution. Idem si j'utilise Me.Visible = False / Me.Visible = True.
Si quelqu'un a également une idée ou une solution à ce niveau là... :jap:

Reply

Marsh Posté le 10-07-2006 à 13:26:07    

En fait je pense que c'est le fait de perdre mes COM objects qui fait que mon ContextMenuStrip n'est plus sélectionnable. Ensuite savoir pourquoi je perd ces derniers... Mystère!
Bon finalement je baisse les bras je vais faire mon traitement en "réduisant" ma Form même si c'est pas trop ce qu'on m'a demandé tant pis... Si toutefois quelqu'un a une idée afin de résoudre mon problème je l'invite à répondre ça ne serait que mieux pour l'exéc. de mon appli. :hello:

Reply

Marsh Posté le 11-07-2006 à 13:01:27    

Bonjour à tous.
Voici les news de mon problème: j'ai trouvé son origine.
C'est un peu compliqué mais le fait de "Hide" ma Form la rend étrangement non modale, du coup l'exécution de mon programme se poursuit, c'est à dire que ma Form perd tous les attributs qu'elle a chargé en mémoire, de plus que les singletons qui sont lancés au chargement pour récupérer mes COM objects.
En réalité, VB.NET libère toutes les ressources d'une Form lorsque celle-ci n'est plus utilisée: dans le cas présent, lorsqu'elle n'est plus modale. Le fait de libérer ces COM objects a pour conséquence de mettre à 'NULL' tous leurs attributs. Du coup, impossible de poursuivre une exécution normale de mon appli une fois la Form a été "Hide". J'ai bien tenté de cacher ma Form sans passer par cette méthode mais en vain, il n'en existe pas d'autre.
Je tente donc à l'heure actuelle de préserver mes COM objects en gardant les instances de mes singletons. Le problème étant que 2 Threads différents ne peuvent pas accéder en temps normal à un COM object chargé dans l'un quand l'autre veut le consulter... Mon idée est donc de lancer un serveur d'écoute qui se chargerai uniquement de l'instanciation de mes singletons et de l'accès à ces derniers. Seulement j'ai peur que ce ne soit pas une solution...
Si quelqu'un sais comment faire communiquer des COM objects entre 2 Threads différents ou bien comment garder une Form modale tout en la cachant, qu'il se pononce siouplai car je m'engage dans un engrenage sans fin j'ai bien peur =(.
Merci d'avance pour vos posts :jap:


Message édité par les gens roots le 11-07-2006 à 13:02:30
Reply

Marsh Posté le 11-07-2006 à 13:37:54    

Bon ben ma solution du 2e serveur est stérile: je ne peux pas accéder à mon singleton qui garde en mémoire mes Forms pour des traitements ultérieurs par l'extérieur... du coup je ne sais vraiment pas quoi faire à part passer au plan B: réduire mes fenêtres pour un affichage tout moche =[. Si quelqu'un a une solution miracle, qu'il parle dès maintenant ou se taise à jamais ! :bounce:

Reply

Marsh Posté le 11-07-2006 à 17:05:36    

C'est bon j'ai résolu mon problème d'accès aux COM objects entre Threads différents: c'est en fait l'état d'appartenance de ces derniers. Ils doivent être déclarés en "MTA" pour ce faire. Mon "dernier" (j'espère) problème à ce sujet est que lorsque je lance mon ContextMenu depuis le Thread créateur de la Form, il n'est plus accessible une fois que je "Hide" puis "Show" la Form sous forme modale. En revanche, si je ne l'utilise que lorsqu'elle est rappellée (ShowDialog) depuis mon serveur, il marche sans problème à chaque fois... Je me penche sur le sujet et vous tiendrai au courant si certains d'entre vous sont interressés.

Reply

Marsh Posté le 11-07-2006 à 17:41:43    

Finalement je vais changer le fonctionnement de mon prog pour que la Form soit affichée uniquement depuis le serveur ;o. J'ai perdu assez de temps sur ce fonctionnement. Sur ce j'espère que ce topic pourra aider certains d'entre vous. Si jamais vous avez besoins de précisions sur ces Threads d'appartenance MTA je pourrai p-e y répondre. MP for this :bounce:. See you all

Reply

Marsh Posté le 11-07-2006 à 17:46:14    

en résumé, on a eu droit au feuilleton de la semaine, avec une résolution quasi solitaire de tes pb ^^. Merci pour nous avoir tenu au couranten tout cas, et j'espère aussi que ce topic servira au plus grand nombre.

Reply

Marsh Posté le 12-07-2006 à 09:07:46    

Voilà c'est un peu comme les feux de l'amour ^_^.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed