cs_ginger4957
Messages postés69Date d'inscriptionjeudi 8 janvier 2009StatutMembreDernière intervention 3 septembre 2010
-
17 févr. 2009 à 16:23
cs_ginger4957
Messages postés69Date d'inscriptionjeudi 8 janvier 2009StatutMembreDerniè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 ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_ginger4957
Messages postés69Date d'inscriptionjeudi 8 janvier 2009StatutMembreDerniè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 :
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
cs_ginger4957
Messages postés69Date d'inscriptionjeudi 8 janvier 2009StatutMembreDerniè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
cs_ginger4957
Messages postés69Date d'inscriptionjeudi 8 janvier 2009StatutMembreDerniè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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
cs_ginger4957
Messages postés69Date d'inscriptionjeudi 8 janvier 2009StatutMembreDerniè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 ?
cs_ginger4957
Messages postés69Date d'inscriptionjeudi 8 janvier 2009StatutMembreDerniè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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
cs_ginger4957
Messages postés69Date d'inscriptionjeudi 8 janvier 2009StatutMembreDerniè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
cs_ginger4957
Messages postés69Date d'inscriptionjeudi 8 janvier 2009StatutMembreDerniè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à ?