Vb6 à vb2008 : equivalent de screen.activeControl ? [Résolu]

cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 17 févr. 2009 à 16:23 - Dernière réponse : cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention
- 3 mars 2009 à 17:58
Bonjour,

Je voudrais savoir s'il existe un équivalent de cette ligne (qui est en vb6) en vb 2008 :

SavedWnd = Screen.ActiveControl.hwnd

J'ai lu cet article :

Propriété ActiveControl

Dans Visual Basic 6.0, la propriété ActiveControl de l'objet Screen sert à déterminer le contrôle qui a le focus. La propriété ActiveControl peut être utilisée dans une capacité globale, comme dans Screen.ActiveControl, où le contrôle actif est retourné sur le formulaire actuellement sélectionné. Si un formulaire spécifique est référencé, par exemple, Form2.ActiveControl, ActiveControl spécifie le contrôle qui aura le focus si le formulaire référencé est actif.

Dans Visual Basic 2008, il n'y a plus de propriété globale ActiveControl ; chaque instance d'un formulaire dispose de sa propre propriété ActiveControl. Lors du référencement d'un formulaire spécifique, cette propriété fonctionne exactement comme dans Visual Basic 6.0. Pour déterminer le contrôle actif sur le formulaire actuellement sélectionné, vous devez d'abord parcourir la collection OpenForms et vérifier la propriété ContainsFocus pour déterminer quel formulaire est actif.

Mais je ne vois pas trop comment faire pour parcourir la collection et vérifier la propriété ContainsFocus ?

Cordialement,
Ginger
Afficher la suite 

Votre réponse

48 réponses

Meilleure réponse
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 18 févr. 2009 à 17:39
3
Merci
Solution trouvée ! Ouf ^^ A partir de code C# :

this.RichTextBox1.SelectionStart = this.RichTextBox.Text.Length;
this.RichTextBox1.ScrollToCaret();

J'ai modifié la ligne 52 de UF_Monitor :

Me.txtMessages.SelectionStart = Me.txtMessages.Text.Length
Me.txtMessages.ScrollToCaret()

Problème résolu. Maintenant reste un autre problème :

fArchiveTempFile = fso.OpenTextFile(gs_FilesToArchive_TempFile, Scripting.IOMode.ForWriting)

Cette ligne retourne une exception non gérée (SecurityException). Je pense que l'élément fso pose problème ?

Cordialement,
Ginger

Merci cs_ginger4957 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de cs_ginger4957
Meilleure réponse
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 27 févr. 2009 à 20:46
3
Merci
Utilise 2 variables.

D'ailleurs, l'exemple que tu donne en VB6, contrairement à ce que tu dis, laisse supposé que déjà 2 variables étaient utilisées, puisque dans l'exemple, le fichier est ouvert uniquement en écriture.

Tu ne pourra de toute façon pas, en même temps, lire et écrire dans le fichier. Il faudra d'abord que le fichier soit refermé pour pouvoir être ouvert dans l'autre mode.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de cs_casy
Meilleure réponse
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 2 mars 2009 à 11:39
3
Merci
System.IO.Directory.GetDirectories

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de cs_casy
Meilleure réponse
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 3 mars 2009 à 14:04
3
Merci
Exemple extrait de l'aide :

    ' Make a reference to a directory.
    Dim di As New DirectoryInfo("c:")
    ' Get a reference to each directory in that directory.
    Dim diArr As DirectoryInfo() = di.GetDirectories()
    ' Display the names of the directories.
    Dim dri As DirectoryInfo
    For Each dri In diArr
      Console.WriteLine(dri.Name)
    Next dri

Pour ce qui est des répertoires tout ce trouve dans System.IO.Directory et System.IO.DirectoryInfo
Pour ce qui est des fichiers c'est System.IO.File
Pour les chemins c'est  System.IO.Path

Et enfin pour ce qui est des flux de lectures et d'écritures (dans un fichier par exemple) c'est System.IO.Stream

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de cs_casy
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 17 févr. 2009 à 17:00
0
Merci
PS : ils disent que l'exception NullReferenceException n'ap as été gérée ; la référence d'objet n'est pas définie à une instance d'objet.
Sous VS 2008 il est écrit ceci :

SavedWnd = VB6.GetActiveControl().Handle.ToInt32
Commenter la réponse de cs_ginger4957
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 17 févr. 2009 à 17:51
0
Merci
Peut-etre un truc du genre :
        For Each frm As Form In My.Application.OpenForms
            If frm.ContainsFocus = True Then
                MessageBox.Show(frm.ActiveControl.Name)
            End If
        Next

J'ai pas testé si ça marche.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Commenter la réponse de cs_casy
Utilisateur anonyme - 17 févr. 2009 à 19:21
0
Merci
essaye peut être ça:
SavedWnd  =  System.Windows.Forms.Form.ActiveForm.Handle
Commenter la réponse de Utilisateur anonyme
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 18 févr. 2009 à 11:49
0
Merci
Bonjour tout le monde

ShadowTzu ta proposition n'a pas fonctionné, et Casy OpenForms pose un pb, je ne sais pas trop quoi faire...
Voici mon code en attendant je continue à chercher...

1. Function Global_ScrollText(ByRef MyControl As System.Windows.Forms.Control,
2. ByRef vLines As Short) As Integer
3. Dim Success As Integer
4. Dim SavedWnd As Integer
5. Dim R As Integer
6. Dim Lines As Double
7. Const EM_LINESCROLL As Integer = &HB6
8. ' Get the window handle of the control that currently has the focus
9. 'UPGRADE_ISSUE: Control hwnd n'a pas pu être résolu car il se trouvait
10. 'dans l'espace de noms générique ActiveControl. Cliquez ici :
11. 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="084D22AD-
12. 'ECB1-400F-B4C7-418ECEC5E36E"'
13.
14. SavedWnd = VB6.GetActiveControl().Handle.ToInt32
15. Lines = vLines
16. ' Set the focus to the passed control.
17. MyControl.Focus()
18. ' Scroll the lines.
19. Success = SendMessage(MyControl.Handle.ToInt32, EM_LINESCROLL, 0, Lines)
20. ' Restore the focus to the original control.
21. R = PutFocus(SavedWnd)
22. ' Return the number of lines actually scrolled.
23. Global_ScrollText = Success
24. End Function

Merci pour vos réponses,
Cordialement,
Ginger
Commenter la réponse de cs_ginger4957
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 18 févr. 2009 à 11:50
0
Merci
PS : OpenForms n'est pas un membre de "monProjet.vb"
Commenter la réponse de cs_ginger4957
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 18 févr. 2009 à 15:00
0
Merci
Ma procédure de tout à l'heure (du fichier Mz_Fonctions) est en fait appelée dans une autre procédure (du fichier UF_Monitor) qui sert à ajouter un message après la dernière ligne remplie. Le problème est de savoir comment se positionner sur cette dernière ligne pour pouvoir ajouter le nouveau message ?

Voici le code de la procédure appelante (de UF_Monitor) :

1. Public Sub Global_UpdateMessages(ByRef vMessage As String, Optional ByRef
2. isTitre As Boolean False, Optional ByRef isFirst As Boolean False)
3. Dim nbRow As Short
4. Dim i As Short
5. ' si titre, saut de ligne
6. If isTitre Then
7. Me.txtMessages.Text = Me.txtMessages.Text & " " & vbCrLf
8. Call M0_Global.Global_AppendTrtLog("", False)
9. End If
10.
11. If isFirst = True Then
12. If isTitre = True Then
13. Me.txtMessages.Text = vMessage & " - " & Now
14. & vbCrLf
15. Call M0_Global.Global_AppendTrtLog(vMessage,
16. True)
17. Else
18. Me.txtMessages.Text = vMessage & vbCrLf
19. Call M0_Global.Global_AppendTrtLog(vMessage,
20. True)
21. End If
22. Else
23. If isTitre = True Then
24. Me.txtMessages.Text = Me.txtMessages.Text
25. & vMessage & " - " & Now & vbCrLf
26. Call M0_Global.Global_AppendTrtLog(vMessage,
27. True)
28. Else
29. Me.txtMessages.Text = Me.txtMessages.Text
30. & vMessage & vbCrLf
31. Call M0_Global.Global_AppendTrtLog(vMessage,
32. True)
33. End If
34.
35. End If
36.
37. If isTitre Then
38. Me.txtMessages.Text = Me.txtMessages.Text
39. &"=================================================="
40. & vbCrLf
41. Call M0_Global.Global_AppendTrtLog("=================",
42. False)
43. End If
44.
45. Me.lbl_LastMessage.Text = vMessage
46.
47. nbRow = (Len(Me.txtMessages.Text) -
48. Len(Replace(Me.txtMessages.Text, vbCrLf, "", , , 1))) /
49. Len(vbCrLf)
50.
51. Me.Refresh()
52. Call Mz_Fonctions.Global_ScrollText((Me.txtMessages), nbRow + 1)
53.
54. End Sub
Commenter la réponse de cs_ginger4957
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 18 févr. 2009 à 15:03
0
Merci
PS : je rajoute les messages dans un textbox
Commenter la réponse de cs_ginger4957
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 18 févr. 2009 à 15:04
0
Merci
... Et ma scrollbar doit se trouver à la fin c'est ce que je cherche

Cordialement,
Ginger
Commenter la réponse de cs_ginger4957
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 18 févr. 2009 à 17:41
0
Merci
Il s'agit de l'exception SecurityException qui n'a pas été gérée ; Exception de HRESULT : 0x800A0046 (CTL_E_PERMISSIONDENIED)
Commenter la réponse de cs_ginger4957
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 18 févr. 2009 à 20:27
0
Merci
Dsl, j'ai pas lu toutes tes réponses, mais bon, vu que ton problème est résolu ....

Pour fso effectivement, c'est un vieux truc pas toujours très stable. Déjà sous VB6, il pouvait poser de sérieux problèmes.

Tout dépend à quoi te servait fso, en .Net tu as plusieurs classes pour accéder aux fichiers.
Elles sont des le namespaces System.IO.file, System.IO.Stream, System.IO.TexteReader, .......
Et il faut parfois faire une combinaison de plusieurs classe suivant ce que tu as à faire.

Par contre, cela va t'obliger à reprendre une partie de ton code, car les choses ne sont pas forcément directement traduisibles, et quand même un peu plus complexe en .Net.

Tu devrais pouvoir trouver des exemples de codes et des tutoriaux sur internet.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Commenter la réponse de cs_casy
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 19 févr. 2009 à 14:43
0
Merci
Je ne trouves pas grand-chose qui puisse m'aider quant à l'équivalent de ceci :

Dim ma_variable As Scripting.TextStream
...
'ouverture pour écriture dans le repertoire
ma_variable = fso.OpenTextFile(repertoire_un_tel, Scripting.IOMode.ForWriting)

Je pense que ça viendrait de IoMode... en vb6 il était écrit :

Dim ma_variable As TextStream
...
'ouverture pour écriture dans le repertoire
Set ma_variable = fso.OpenTextFile(repertoire_un_tel, ForWriting)

Quelqu'un aurait-il une idée de la traduction en vb 2008 ?

Cordialement,
Ginger
Commenter la réponse de cs_ginger4957
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 19 févr. 2009 à 16:44
0
Merci
Il s'agit d'un pb d'autorisation d'ecriture dans le fichier, car lorsque je teste avec ForReading à la place, aucune exception non gérée n'est détectée. Qu'est-ce que je peux faire pour autoriser l'ecriture ? Si c'est possible ??? :s

Cordialement,
Ginger
Commenter la réponse de cs_ginger4957
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 19 févr. 2009 à 21:07
0
Merci
Dejà, il va falloir que tu vérifie que tu as bien les droits en écriture sur ton fichier, qu'il n'est pas en lecture seule par exemple. Ouvre le avec le bloc note ou autre logiciel compatible, modifie le et essaye de l'enregistrer.

Ensuite si ton fichier est sur le réseau, il va peut-etre falloir activer des paramètres de sécurité au niveau de ton projet. Va dans les propriétés du projet, onglet Sécurité, tu coche 'Activer les paramètre de sécurités' puis 'Application de confiance totale', comme ça tu ne sera pas embeter.

Ensuite, tu peux regarder cette page, ça te donnera peut-etre des idées, surtout la partie A qui traite de la ecture et écriture dans un fichier texte.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Commenter la réponse de cs_casy
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 19 févr. 2009 à 21:08
0
Merci
Avec le lien c'est mieux

http://plasserre.developpez.com/v4-6.htm

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Commenter la réponse de cs_casy
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 20 févr. 2009 à 10:19
0
Merci
Merci Casy, mais aah au secours je n'arrive pas à trouver où est-ce que l'on modifie les parametres de securité... :s
J'ai regardé dans l'aide mais impossible de savoir comment faire tout de même^^
... Aie aie
Commenter la réponse de cs_ginger4957
cs_ginger4957 69 Messages postés jeudi 8 janvier 2009Date d'inscription 3 septembre 2010 Dernière intervention - 20 févr. 2009 à 10:40
0
Merci
J'ai fait le test d'écrire dans le fichier et de l'enregistrer, aucun problème cela fonctionne. Donc je peux écrire dedans... Peut-être que c'est autorisé mais que ça viendrait du code à ce moment là ?
Commenter la réponse de cs_ginger4957

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.