OVH Cloud OVH Cloud

[vb.net 2005] - Création & Récupération de propriété

16 réponses
Avatar
Scottmat
Bonsoir à tous
Franchement merci aux personnes qui me répondront pcq je suis en panique
total !!!
Sa doit etre tout simple, une petit bout de ligne de code mais j'arrive pas
à voir comment
Voici mon petit problème :
Je voulais insérer une image dans un Richtextbox tout simplement
et j'ai voulu rajouter une propriété "Emplacement" (qui enregistrerai
l’emplacement de l’image qui à été insérer)

D’abord une classe générale (avec ma nouvelle propriété) :

Public Interface Element
Property Emplacement() As String
End Interface

Puis propre à l’objet image :
Imports System.ComponentModel
<Serializable()> Public MustInherit Class IMGElement
Implements Element
Dim _sEmplacementImG As String = ""
Dim ImG As New System.Drawing.Rectangle

Public Property EmplacementImG() As String Implements Element.EmplacementImG
Get
Return _sEmplacementImG
End Get
Set(ByVal value As String)
_sEmplacementImG = value
End Set
End Property
End Class

Ensuite la class qui définit l’ajout dans le Richtextbox de l’élément :

Public Class RectangleSimple
Inherits IMGElement
Public Sub add_pictures_to_rtb(ByVal pic As Image, ByVal rtb As RichTextBox,
ByVal index As Integer)
Dim a As Integer
Dim b As Integer
Dim tmpobj As Object
tmpobj = Clipboard.GetDataObject
Clipboard.SetDataObject(pic)
a = rtb.SelectionStart
b = rtb.SelectionLength
rtb.SelectionLength = 0
rtb.SelectionStart = index
rtb.Paste()
Clipboard.SetDataObject(tmpobj)
If index >= a Then a += 1
rtb.SelectionStart = a
rtb.SelectionLength = b
End Sub
End Class

Et pour terminer le code qui insérera l’élément à l’aide d’une boite de
dialogue (sur un événement bouton) :
Private Sub BtnInsertImg_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnInsertImg.Click
Try
Dim a As New InsertionImage ()
Dim OpenFiles As New OpenFileDialog

OpenFiles.Filter = "Tous les Fichiers (*.*)|*.*"

OpenFiles.FilterIndex = 2
OpenFiles.RestoreDirectory = True
OpenFiles.Title = "Inserer une image"

If OpenFiles.ShowDialog = Windows.Forms.DialogResult.OK Then
a.EmplacementImG = OpenFiles.FileName
a.add_pictures_to_rtb(New Bitmap(OpenFiles.FileName), Richtextbox,
Richtextbox.SelectionStart)
End If

Catch ex As Exception
MessageBox.Show("Impossible d'inserer cette image !", MessageBoxButtons.OK,
MessageBoxIcon.Warning)
End Try
End Sub

Donc j’ai créé ma propriété EmplacementImG. J’ai affecter la valeur de cette
propriété par l’emplacement d’origine de l’image quand l’on clique sur OK de
la boite de dialogue " Inserer une image".

Le problème c’est que je n’arrive pas à récupéré cette propriété lorsque
l’utilisateur sélectionne une image.
=> Un Object (Class image) créer dans un autre objet (richtextbox) ! Comment
faire ???? je crack j'ai passer trop de nuit & d'heure dessus et je n'arrive
pas a comprendre comment récupéré cette valeur !!

Sa doit etre tout béte à mon avis ...

Merci par avance en tout cas, à celui ou celle qui m’aidera

10 réponses

1 2
Avatar
mlp code
as-tu vérifier en debug si après ta ligne a.EmplacementImG =
OpenFiles.FileName
a.EmplacementImG contient bel et bien la valeur.

Lorsque tu veux récupérer cette valeur es-tu en dehors de la méthode
BtnInsertImg_Click? Parce que ton objet "a New InsertionImage" est
locale à ta fonction et c'est cet objet seulement qui aura la valeur.
Lorsque tu sors de l'événement ton objet n'est plus accessible.

Normalement pour récupérer la valeur tu n'aurais qu'à faire
a.EmplacementImG.

J'espère que cela te viendra en aide.
Avatar
Scottmat
tout d'abord un grand merci de m'avoir répondu !
j'ai vérifier elle (la propriété) contient bien la valeur

est local à ma fonction ? j'ai du mal à suivre la !
Si par exemple je déclare par :
Dim ObjetImage as New InsertionImage ac New il va recréer et non récupéré
l'objet ? surtout arréte moi si je dit une connerie !
mais oui comme tu di juste a.EmplacementImG mais selon l'objet que
l'utilisateur à sélectionner dans le richtextbox ! Donc j'ai essayer je ne
sais pas combien de ligne de code à m'arracher les cheveux ! Mais logiquement
la syntaxe simplifié serait :
Me.RichtextBox1.Object sélectionner. propriété EmplacementImg !
mais je ne sais pas comment tourner ce bout de code.
Avatar
mlp code
oui effectivement à chaque new il crée un nouvel objet et oui comme
du dit tu n'aurais juste a faire
Me.richtextbox1.selectedindex.emplacementImg.

Cependant je n'ai pas vu dans ton code où tu ajoutais ton objet à ton
richtextbox1. Je n'ai jamais travailler avec un richtextbox mais je
sais que si tu veux récupérer une valeur dans celui-ci tu dois
l'avoir ajouté avant.
Avatar
mlp code
local à la fonction, ça veux dire que tu as déclaré ta variable
dans ta fonction (ici dans l'événement click) et lorsque tu sors de
cette fonction toutes les variables que tu as déclaré n'existe plus.
Si tu veux les conserver il faut que tu les assigne à un objet global
(exemple un controle) où que tu te déclare une variable globale.
Avatar
Scottmat
si si voici mon code dans lequel est insérer l'image :

Private Sub BtnInsertImg_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BtnInsertImg.Click
Try
Dim a As New InsertionImage ()
Dim OpenFiles As New OpenFileDialog

OpenFiles.Filter = "Tous les Fichiers (*.*)|*.*"

OpenFiles.FilterIndex = 2
OpenFiles.RestoreDirectory = True
OpenFiles.Title = "Inserer une image"

If OpenFiles.ShowDialog = Windows.Forms.DialogResult.OK Then
a.EmplacementImG = OpenFiles.FileName
a.add_pictures_to_rtb(New Bitmap(OpenFiles.FileName), Richtextbox,
Richtextbox.SelectionStart)
End If

Catch ex As Exception
MessageBox.Show("Impossible d'inserer cette image !", MessageBoxButtons.OK,
MessageBoxIcon.Warning)
End Try
End Sub

comme tu le voi c'est à l'événement click d'un bouton et c'est ici qu'est
complété la propriété 'EmplacementImg' !
et ensuite dans un deuxiéme temps récupéré les données quand l'utilisateur
double click sur une image se trouvant dans le richtextbox
Avatar
mlp code
si c'est une application web essaye ceci :

essaye de mettre ceci avant d'ajouter ton image.(add_...)

a.Attributes.Add("ondoubleclick", "alert(" & a.EmplacementImG & ");")

normalement sur le doubleclick(si le contrôle le gère) il devrait
t'afficher une alerte avec ce qui se trouve dans a.EmplacementImG(ici
le path de l'image je crois), si ça marche tu modifiras pour faire ce
que tu veux. Tu n'auras qu'à mettre ta fonction javascript dans la
partie de droite.

Sinon si c'est une application normal(Forms) :

À ce que j'ai compris le richtextboxt permet d'ajouter un contrôle
image en plus du text. Le problème c'est que la sélection ne ce fait
par rapport au index dans ce cas-ci mais comme une sélection
normal(texte).

faudrait que tu essaie quelque chose du genre

for each item as InsertionImage in richtextbox.controls
if item.selected = true then
'là tu pourras accéder à ta propriété
item.emplacementImg
end if
next

sinon peut-être que le richtextbox n'est pas approprié pour ce que tu
veux faire, faudrait que tu vérifie.

Dit moi ce que tu veux faire au juste si mes suggestions n'ont pas
fonctionné.
Avatar
Scottmat
merci en tous cas de te pencher sur mon probléme !
bin c'est une application Windows Forms en fait' et non Web,
j'ai tester ton code il m'affiche 'item.selected' en erreur en me disant :
" 'selected' n'est pas un membre de 'WindowsApplication.RectangleSimple'."
sinon j'ai changer :

for each item as InsertionImage in richtextbox.controls
if item.selected = true then
'là tu pourras accéder à ta propriété
item.emplacementImg
end if
next

par :

For Each item As RectangleSimple In Message.Controls
If item.selected = True Then
'là tu pourras accéder à ta propriété
item.EmplacementImG()
End If
Next

car il me trouver une erreur à InsertionImage car c'est la méthode pour
insérer des images donc j'ai changer par RectangleSimple, la structure(le
squelette) de l'objet. quand je saisi item puis le point il m'afficher les
méthode de l'objet et les propriétés !
je continu tout de même à me pencher sur le probléme mais franchement je
vois pas, mais c'est forcément possible !
j'ai supprimer le if pour voir si cela marcher, comme ceci :

For Each item As RectangleSimple In Message.Controls
MsgBox(item.EmplacementImG)
End If
Next

et toujours rien :(
Avatar
mlp code
Quand tu dis toujours rien, c'est qu'il n'a pas entrer dans la boucle
où il t'affiche des message box vide ?

Dans les 2 cas tu devrais vérifié ta méthode qui ajoute ton image à
ton richtextbox. J'ai regarder le code et il me semble qu'il devrait il
y avoir quelque chose du genre :

rtb.add(ton objet img). Il ne faut pas que tu ajoute seulement l'image
seulement, mais l'objet au complet si tu veux pouvoir récupérer sa
propriété.

Est-ce que tu vois tes images apparaîtrent à l'écran ?
Avatar
mlp code
Public Sub add_pictures_to_rtb(ByVal pic As Image, ByVal rtb As
RichTextBox,
ByVal index As Integer) ^

|
ta méthode devrait prendre ton objet rectangle simple comme paramètre
que lui tu ajoute a ton contrôle rtb.

Dans ton événement click, ton objet a devrait être déclaré en tant
que RectangleSimple et non InsertionImage(du moins je crois), puisque
c'est cet objet que tu veux.

Sinon, les images ont une propriété ImageURL qui elle contient déjà
l'emplacement de l'image. Peut-être pourrais-tu utiliser cette
propriété ?

Regarde ces options et dit moi ce que tu en pense.
Avatar
Scottmat
non apparament il n'entre pas dans la boucle car rien ne se
produit !
regarde je l'ajoute comme tu le dit :

'je déclare le type en créant un nouvelle objet en
RectangleSimple et non InsertionImage, tu avais raison ^^
Dim a As New RectangleSimple
'Ensuite on applique la propriété Emplacement
a.EmplacementImG = OpenFilesMailing.FileName
'ensuite la méthode ajouter une image
a.add_pictures_to_rtb(New Bitmap(OpenFilesMailing.FileName),
Message, Message.SelectionStart)

Et l'image apparait bien sur l'écran dans le richtextbox
C'est l'objet au complet que j'ai ajouter la ? non ?
sinon je ne peu toujours pas récupéré la propriété, j'ai bien vérifier elle
est bien enregistrer dans la propriété à cette ligne :
a.EmplacementImG = OpenFilesMailing.FileName
(J'ai simplement rajouter msgbox(a.EmplacementImG) pour vérifier et j'ai
bien le chemin du fichier d'origine de l'image)
1 2