none
Insérer une image dans une classe RichTextBox (sans passer par le presse papier) RRS feed

  • Question

  • Bonjour,

    Je me suis crée un petit éditeur de texte dans le but de rivaliser avec Word ou Office (bien sûr que non, je suis loin d'avoir le niveau ;) ).

    Après avoir implémenté des fonctions de bases comme la couleur du texte, sa taille ou son style, je suis passé à l'insertion d'images. Alors j'ai cherché sur Internet, et j'ai trouvé que la plupart utilisent le presse papier. Or cette méthode contient plein d'inconvénients. Pour insérer des images, j'insère une PictureBox dans le RichTextBox, et j'ajoute un évènement qui se produit lorsque celle-ci est cliquée.

    Vous comprendrez mieux en lisant le code :

    Note : TextEditionsBox = New TextEditor_TextMenu

    Note : TextEditor_TextMenu est un contrôle utilisateur que j'ai crée dont vous trouverez un extrait de code sous celui-ci

    Note : Values.ImageValue.FromFile(file) est une méthode que j'ai crée qui retourne une image à partir d'un fichier

    ''' <summary>
    ''' Insère une image depuis l'ordinateur
    ''' </summary>
    ''' <param name="newFile">Le fichier contenant l'image à insérer</param>
    Private Sub InsertImageFromComputer(newFile As String) Handles TextEditionsBox.ImportImageFromComputer
            Dim newPictureBox As New PictureBox
            newPictureBox.SizeMode = PictureBoxSizeMode.AutoSize
            newPictureBox.Image = Values.ImageValue.FromFile(newFile)
            AddHandler newPictureBox.Click, AddressOf PictureBoxSelected
            textRichTextBox.Controls.Add(newPictureBox)
    End Sub

    L'évènement ImportImageFromComputer est un évènement que j'ai crée et appelé à partir d'un contrôle utilisateur : voici son code :

    Note : ImageOpenFileDialog = New OpenFileDialog

    ''' <summary>
    ''' Se produit quand l'utilisateur importe une image depuis son ordinateur
    ''' </summary>
    ''' <param name="imageFile">Le fichier de l'image à importer</param>
    Public Event ImportImageFromComputer(newFile As String)
    
    Private Sub InsertionMenuClicked(sender As ToolStripMenuItem, e As EventArgs) Handles InsertImageFromComputerToolStripMenuItem.Click
             If ImageOpenFileDialog.ShowDialog = DialogResult.OK Then
                 RaiseEvent ImportImageFromComputer(ImageOpenFileDialog.FileName)
             End If
    End Sub

    Si vous avez suivi jusque là, vous pourriez sans doute résoudre mon problème.

    Quand j'appelle la méthode InsertImageFromComputer, la pictureBox crée se place en haut à droite de la RichTextBox quoi qu'il arrive. Je voudrais qu'elle se place au niveau du curseur, et non en haut à droite. Est-il possible de le faire ?

    Je sais qu'on peut le faire avec le presse papier, mais avec cette méthode on ne peut pas récupérer l'image une fois celle-ci collée.

    Merci pour toutes vos réponses !!!


    Nathan

    dimanche 27 octobre 2019 08:43

Toutes les réponses