Vb6 à vb2008 : equivalent de screen.activeControl ?

Résolu
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010 - 17 févr. 2009 à 16:23
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010 - 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

48 réponses

cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
18 févr. 2009 à 17:39
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
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
27 févr. 2009 à 20:46
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 #   
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
2 mars 2009 à 11:39
System.IO.Directory.GetDirectories

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
3 mars 2009 à 14:04
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 #   
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
17 févr. 2009 à 17:00
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
17 févr. 2009 à 17:51
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 #   
0
Utilisateur anonyme
17 févr. 2009 à 19:21
essaye peut être ça:
SavedWnd  =  System.Windows.Forms.Form.ActiveForm.Handle
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
18 févr. 2009 à 11:49
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
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
18 févr. 2009 à 11:50
PS : OpenForms n'est pas un membre de "monProjet.vb"
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
18 févr. 2009 à 15:00
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
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
18 févr. 2009 à 15:03
PS : je rajoute les messages dans un textbox
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
18 févr. 2009 à 15:04
... Et ma scrollbar doit se trouver à la fin c'est ce que je cherche

Cordialement,
Ginger
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
18 févr. 2009 à 17:41
Il s'agit de l'exception SecurityException qui n'a pas été gérée ; Exception de HRESULT : 0x800A0046 (CTL_E_PERMISSIONDENIED)
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
18 févr. 2009 à 20:27
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 #   
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
19 févr. 2009 à 14:43
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
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
19 févr. 2009 à 16:44
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
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 févr. 2009 à 21:07
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 #   
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
19 févr. 2009 à 21:08
Avec le lien c'est mieux

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

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
20 févr. 2009 à 10:19
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
0
cs_ginger4957 Messages postés 69 Date d'inscription jeudi 8 janvier 2009 Statut Membre Dernière intervention 3 septembre 2010
20 févr. 2009 à 10:40
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à ?
0