Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1676 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1397780
les gens r​oots
Jah rastafarei
Posté le 30-06-2006 à 10:28:27  profilanswer
 

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
mood
Publicité
Posté le 30-06-2006 à 10:28:27  profilanswer
 

n°1397803
jpcheck
Pioupiou
Posté le 30-06-2006 à 10:49:45  profilanswer
 

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

n°1397819
les gens r​oots
Jah rastafarei
Posté le 30-06-2006 à 10:59:27  profilanswer
 

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.

n°1397969
les gens r​oots
Jah rastafarei
Posté le 30-06-2006 à 13:10:49  profilanswer
 

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

n°1398159
les gens r​oots
Jah rastafarei
Posté le 30-06-2006 à 15:52:12  profilanswer
 

up :jap:

n°1399203
les gens r​oots
Jah rastafarei
Posté le 03-07-2006 à 10:40:51  profilanswer
 

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:

n°1400077
les gens r​oots
Jah rastafarei
Posté le 04-07-2006 à 11:43:29  profilanswer
 

Need help ! :'(
up plz!!!

n°1400086
jpcheck
Pioupiou
Posté le 04-07-2006 à 11:47:28  profilanswer
 

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

n°1400103
JihemAir
Je sais pas
Posté le 04-07-2006 à 11:58:38  profilanswer
 

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 ?
n°1400132
les gens r​oots
Jah rastafarei
Posté le 04-07-2006 à 12:32:02  profilanswer
 

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
mood
Publicité
Posté le 04-07-2006 à 12:32:02  profilanswer
 

n°1400188
JihemAir
Je sais pas
Posté le 04-07-2006 à 13:39:35  profilanswer
 

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 ?
n°1400215
les gens r​oots
Jah rastafarei
Posté le 04-07-2006 à 13:57:08  profilanswer
 

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: .

n°1400230
les gens r​oots
Jah rastafarei
Posté le 04-07-2006 à 14:06:55  profilanswer
 

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¿;,

n°1400257
JihemAir
Je sais pas
Posté le 04-07-2006 à 14:15:45  profilanswer
 

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 ?
n°1400347
les gens r​oots
Jah rastafarei
Posté le 04-07-2006 à 15:21:40  profilanswer
 

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:

n°1400358
JihemAir
Je sais pas
Posté le 04-07-2006 à 15:30:07  profilanswer
 

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 ?
n°1400382
les gens r​oots
Jah rastafarei
Posté le 04-07-2006 à 15:54:31  profilanswer
 

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:

n°1400527
JihemAir
Je sais pas
Posté le 04-07-2006 à 17:17:54  profilanswer
 

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 ?
n°1400549
les gens r​oots
Jah rastafarei
Posté le 04-07-2006 à 17:29:30  profilanswer
 

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:

n°1401677
les gens r​oots
Jah rastafarei
Posté le 06-07-2006 à 08:56:01  profilanswer
 

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
n°1402165
les gens r​oots
Jah rastafarei
Posté le 06-07-2006 à 17:05:31  profilanswer
 

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


Message édité par les gens roots le 06-07-2006 à 17:06:05
n°1402171
jpcheck
Pioupiou
Posté le 06-07-2006 à 17:18:38  profilanswer
 

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.

n°1402174
les gens r​oots
Jah rastafarei
Posté le 06-07-2006 à 17:25:22  profilanswer
 

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

n°1402180
JihemAir
Je sais pas
Posté le 06-07-2006 à 17:29:44  profilanswer
 

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 ?
n°1402182
les gens r​oots
Jah rastafarei
Posté le 06-07-2006 à 17:33:30  profilanswer
 

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...

n°1402343
JihemAir
Je sais pas
Posté le 06-07-2006 à 21:40:10  profilanswer
 

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>

n°1402524
les gens r​oots
Jah rastafarei
Posté le 07-07-2006 à 09:37:40  profilanswer
 

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'(

n°1402758
les gens r​oots
Jah rastafarei
Posté le 07-07-2006 à 13:06:13  profilanswer
 

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:

n°1403536
les gens r​oots
Jah rastafarei
Posté le 10-07-2006 à 09:30:47  profilanswer
 

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:

n°1403776
les gens r​oots
Jah rastafarei
Posté le 10-07-2006 à 13:26:07  profilanswer
 

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:

n°1404532
les gens r​oots
Jah rastafarei
Posté le 11-07-2006 à 13:01:27  profilanswer
 

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
n°1404570
les gens r​oots
Jah rastafarei
Posté le 11-07-2006 à 13:37:54  profilanswer
 

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:

n°1404824
les gens r​oots
Jah rastafarei
Posté le 11-07-2006 à 17:05:36  profilanswer
 

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.

n°1404873
les gens r​oots
Jah rastafarei
Posté le 11-07-2006 à 17:41:43  profilanswer
 

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

n°1404879
jpcheck
Pioupiou
Posté le 11-07-2006 à 17:46:14  profilanswer
 

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.

n°1405198
les gens r​oots
Jah rastafarei
Posté le 12-07-2006 à 09:07:46  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
[VB6] Probleme avec "EXIT SUB"Problème header
probleme affichage boucleprobleme: les modification ne prennent pas effet !!
Problème flashplayerJava et les tableaux (J&#8217;ai un gros-petit problème)
problème de variable en boucle arrivant d'un formulaire[VBA] Problème avec les formats de date
probleme de double boucle et variables... [résolu]Problème d'encodage avec phpmailer
Plus de sujets relatifs à : Problème avec le contrôle "ContextMenuStrip" sur MS VisualBasic 2005


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR