Autor
|
Tema: [SOLUCIONADO] Menúcontextual en RichTextBox para una selección de texto (Leído 4,524 veces)
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
Estoy usando un extended RichTextbox que se llama "RichtextboxLinks", con ese control puedo usar el método ".InsertLink" para insertar Filelinks en el richtextbox, y abrirlos diréctamente usando el click izquierdo dle ratón. RichTextboxLinks > http://www.codeproject.com/Articles/9196/Links-with-arbitrary-text-in-a-RichTextBoxLo que quiero hacer es abrir los filelinks con el click derecho en lugar de usar click izquierdo, y quiero que antes se muestre un menú contextual para seleccionar la acción a realizar, el menú contextual contiene estos dos elementos: 1. Open file in explorer 2. Open file with... El problema es que no tengo ni idea de como hacerlo. he intentado añadir el handle del evento junto al contextmenu pero me dice que la firma es incompatible para el handle del "InsertLink". Este es el sub que tengo y que maneja el evento cuando un "FileLink" se clicka con el botón izquierdo dle ratón: (e.LinkText contiene el text del FileLink) ' This event happens when a FileLink is clicked Private Sub results_box_LinkClicked_1(sender As Object, e As LinkClickedEventArgs) Handles results_box.LinkClicked ' I can't add here a handle for the contextmenu: "results_box.ContextMenu" but anyway I don't know if that is the way to do it NewMenu.show ' Dim FileInformation = My.Computer.FileSystem.GetFileInfo(e.LinkText) ' Process.Start("explorer.exe", " /select," & FileInformation.DirectoryName & "\" & FileInformation.Name) End Sub
PD: Más info aquí: http://stackoverflow.com/questions/13994639/contextmenu-in-a-richtextbox-for-open-a-filelink#comment19317914_13994639
|
|
« Última modificación: 26 Diciembre 2012, 04:00 am por EleKtro H@cker »
|
En línea
|
|
|
|
Keyen Night
Desconectado
Mensajes: 496
Nothing
|
Me he partido la cabeza un rato buscando como hacerlo pero aquí está y funciona perfecto En un proyecto Form, con un Form llamado 'Form1', un ContextMenuStrip con un Item llamado 'AbrirToolStripMenuItem' y de Texto 'Abrir' y un RichTextBox con rutas de prueba... El código está completamente comentado Public Class Form1 'Ruta: Variable que guarda la ruta a la que le hemos hecho segundo click' Public Ruta As String 'Este evento se da antes que Opening' Private Sub RichTextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseDown 'Si el evento se dio con el segundo click' If e.Button = Windows.Forms.MouseButtons.Right Then 'Palabra: Variable que almacenara la palabra a la que le hemos dado segundo click' Dim Palabra As String = "" 'Index: Index más cercano al Char en el RichTextBox al que le hemos dado click' Dim Index As Integer = RichTextBox1.GetCharIndexFromPosition(e.Location) 'Comienzo: Variable que almacena el Index dónde comienza la palabra' Dim Comienzo As Integer = Index 'Final: Variable que almacena el Index dónde termina la palabra' Dim Final As Integer = Index 'Mientras que el Char en la posición Comienzo sea diferente de espacio y restarle uno' 'nos matenga aún en un Index existente, retrocemos en el texto.' While RichTextBox1.Text(Comienzo) <> " " And Comienzo - 1 > -1 Comienzo -= 1 End While 'Si el carácter en Comienzo es espacio, avanzamos un Index.' If RichTextBox1.Text(Comienzo) = " " Then Comienzo += 1 End If 'Usamos Char.IsControl para buscar el salto de línea.' 'Mientras que el Char el la posición Final no sea un salto de línea y sumarle uno' 'nos mantenga en un Index existente, avanzamos un espacio.' While Not Char.IsControl(RichTextBox1.Text(Final)) And Final + 1 < RichTextBox1.TextLength Final += 1 End While 'Si el carácter en Final no es salto de línea, avanzamos un Index.' If Not Char.IsControl(RichTextBox1.Text(Final)) Then Final += 1 End If 'La palabra está desde el Comienzo y su longitud es Final - Comienzo.' Palabra = RichTextBox1.Text.Substring(Comienzo, Final - Comienzo) 'Pasamos la Palabra a la variable global Ruta' Ruta = Palabra End If End Sub Private Sub AbrirToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AbrirToolStripMenuItem.Click Process.Start(Ruta) 'Iniciamos la Ruta. End Sub Private Sub ContextMenuStrip1_Opening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening 'Se cancela si el archivo de la ruta no existe. e. Cancel = Not IO. File. Exists(Ruta ) End Sub End Class
Edito: Cambie la expresión regular por un File.Exists ya que estás trabajando con archivos.
|
|
« Última modificación: 25 Diciembre 2012, 09:29 am por Keyen Night »
|
En línea
|
La Fé Mueve Montañas... ...De Dinero
La programación es más que un trabajo es más que un hobby es una pasión...
|
|
|
spiritdead
Desconectado
Mensajes: 296
|
Estoy usando un extended RichTextbox que se llama "RichtextboxLinks", con ese control puedo usar el método ".InsertLink" para insertar Filelinks en el richtextbox, y abrirlos diréctamente usando el click izquierdo dle ratón. RichTextboxLinks > http://www.codeproject.com/Articles/9196/Links-with-arbitrary-text-in-a-RichTextBoxLo que quiero hacer es abrir los filelinks con el click derecho en lugar de usar click izquierdo, y quiero que antes se muestre un menú contextual para seleccionar la acción a realizar, el menú contextual contiene estos dos elementos: 1. Open file in explorer 2. Open file with... El problema es que no tengo ni idea de como hacerlo. he intentado añadir el handle del evento junto al contextmenu pero me dice que la firma es incompatible para el handle del "InsertLink". Este es el sub que tengo y que maneja el evento cuando un "FileLink" se clicka con el botón izquierdo dle ratón: (e.LinkText contiene el text del FileLink) ' This event happens when a FileLink is clicked Private Sub results_box_LinkClicked_1(sender As Object, e As LinkClickedEventArgs) Handles results_box.LinkClicked ' I can't add here a handle for the contextmenu: "results_box.ContextMenu" but anyway I don't know if that is the way to do it NewMenu.show ' Dim FileInformation = My.Computer.FileSystem.GetFileInfo(e.LinkText) ' Process.Start("explorer.exe", " /select," & FileInformation.DirectoryName & "\" & FileInformation.Name) End Sub
PD: Más info aquí: http://stackoverflow.com/questions/13994639/contextmenu-in-a-richtextbox-for-open-a-filelink#comment19317914_13994639te lo dire denuevo usa el objeto fastcoloredtextbox y usa delegados y hara todo lo que tu desees y mucho mas investiga 1 poquito el richtextbox no tiene la suficiente dinamica para realizar lo q tu quieres de manera optima esto es lo malo de dar todo resuelto, pero toma Private Sub FastColoredTextBox3_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FastColoredTextBox3.MouseMove Dim p As Place = FastColoredTextBox3.PointToPlace(e.Location) If CharIsHyperlink(p) Then FastColoredTextBox3.Cursor = Cursors.Hand Else FastColoredTextBox3.Cursor = Cursors.IBeam End If End Sub Private Function CharIsHyperlink(ByVal place As Place) As Boolean Dim mask = FastColoredTextBox3.GetStyleIndexMask(New Style() {blueStyle}) If place.iChar < FastColoredTextBox3.GetLineLength(place.iLine) Then If (FastColoredTextBox3(place).style And mask) <> 0 Then Return True End If End If Return False End Function Private Sub FastColoredTextBox3_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FastColoredTextBox3.MouseDown Dim p As Place = FastColoredTextBox3.PointToPlace(e.Location) If CharIsHyperlink(p) Then If MsgBox("Estas Accediendo a un enlace fuera del software, desea continuar con la operacion?", vbQuestion + vbYesNo, StringResources.msgboxPREGUNTA) = MsgBoxResult.Yes Then Dim url As String = FastColoredTextBox3.GetRange(p, p).GetFragment("[\S]").Text Process.Start(url) Else End If End If End Sub
|
|
« Última modificación: 26 Diciembre 2012, 01:23 am por spiritdead »
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
@spiritdead No te equivoques conmigo! no soy el típico lammer que lo busca todo hecho, pero si la manera de hacerlo, yo intento informarme primero en Google en MSDN y en Stackoverf... otra cosa es que no encuentre información xD. Lo que pasa es que aún hay algún control que se escapa a mi comprensión o que desconozco, hasta que llega alguien como tú y me dice "tienes que usar fastcoloredtextbox" (es decir, un listview), por ejemplo haste hace pocos días no sabía muy bien que era el listview ni lo que se podía hacer con él, porque nunca lo había usado, pero en cuanto me dijiste que lo que debía usar era un listview me puse a investigar y lo resolví yo solo: Eso sí, es un listview normal, porque yo no tenía ni p*** idea de como crear el modelo de objeto para un fastcoloredtextbox , así que me guardo tu ejemplo que me puede servir para otra ocasión, gracias! @Keyen Lo mismo te digo, al final lo resolví con un listview pero tu esfuerzo no queda en vano porque tu ejemplo me puede servir para otra ocasión, Muchísimas gracias.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
(SOLUCIONADO) Crear un FileLink en un richtextbox, y un evento...
.NET (C#, VB.NET, ASP)
|
Eleкtro
|
8
|
4,953
|
2 Enero 2013, 00:04 am
por Eleкtro
|
|
|
Como puedo mejorar la seleccion en un RichTextBox
.NET (C#, VB.NET, ASP)
|
TMarmol
|
3
|
2,639
|
3 Enero 2014, 02:38 am
por Eleкtro
|
|
|
Enviar texto de un richtextbox a un e-mail
.NET (C#, VB.NET, ASP)
|
Adrylek
|
2
|
2,745
|
8 Julio 2014, 22:45 pm
por Eleкtro
|
|
|
Texto en richtextbox
.NET (C#, VB.NET, ASP)
|
Adrylek
|
5
|
4,190
|
9 Julio 2014, 11:38 am
por Eleкtro
|
|
|
Recuperar posición del texto en un RichTextBox - VB6
Programación Visual Basic
|
VegaSys
|
2
|
3,258
|
16 Abril 2019, 19:25 pm
por VegaSys
|
|