usar net form control como cargar archivo c# winforms hyperlink path richtextbox

c# - net - control richtextbox



Enlace a la ruta del archivo con espacios en RichTextBox? (4)

Tengo VS2010, C #. Yo uso RichTextBox en un formulario. Establecí la propiedad DectectUrls en True. Configuré un evento LinkClicked.

Me gustaría abrir un enlace de archivo como este: file: // C: / Documents and Settings ... o file: // C: / Program Files (x86) ...

No funciona para el camino con espacios.

El código fuente:

rtbLog.SelectionFont = fnormal; rtbLog.AppendText("/t. Open Path" + "file://" + PathAbsScript + "/n/n"); // DetectUrls set to true // launch any http:// or mailto: links clicked in the body of the rich text box private void rtbLog_LinkClicked(object sender, LinkClickedEventArgs e) { try { System.Diagnostics.Process.Start(e.LinkText); } catch (Exception) {} }

¿Alguna sugerencia?


Debe encerrar la ruta con comillas dobles, por ejemplo:

"file://c:/path with spaces/..."

Para agregar una comilla doble a una cadena, debe usar una secuencia de escape /" .


vaya a esa carpeta en particular y otorgue el permiso para escribirla o compartirla desde las propiedades de esa carpeta.


Finalmente, uso un reemplazo ("", "% 20")

// http://social.msdn.microsoft.com/Forums/eu/Vsexpressvb/thread/addc7b0e-e1fd-43f4-b19c-65a5d88f739c var rutaScript = DatosDeEjecucion.PathAbsScript; if (rutaScript.Contains(" ")) rutaScript = "file://" + Path.GetDirectoryName(DatosDeEjecucion.PathAbsScript).Replace(" ", "%20"); rtbLog.AppendText(". Abrir ubicación: " + rutaScript + "/n/n");

El código para el evento LinkClicked:

private void rtbLog_LinkClicked(object sender, LinkClickedEventArgs e) { try { var link = e.LinkText.Replace("%20", " "); System.Diagnostics.Process.Start(link); } catch (Exception) { } }


En lugar de usar% 20 (que algunos usuarios pueden considerar "feo"), puede usar el carácter de espacio no disruptivo UNICODE (U + 00A0). Por ejemplo:

String fileName = "File name with spaces.txt"; FileInfo fi = new FileInfo(fileName); // Replace any '' '' characters with unicode non-breaking space characters: richTextBox.AppendText("file://" + fi.FullName.Replace('' '', (char)160));

Luego, dentro de su enlace haga clic en el controlador para el cuadro de texto enriquecido, haría lo siguiente:

private void richTextBox_LinkClicked(object sender, LinkClickedEventArgs e) { // Replace any unicode non-break space characters with '' '' characters: string linkText = e.LinkText.Replace((char)160, '' ''); // For some reason rich text boxes strip off the // trailing '')'' character for URL''s which end in a // '')'' character, so if we had a ''('' opening bracket // but no '')'' closing bracket, we''ll assume there was // meant to be one at the end and add it back on. This // problem is commonly encountered with wikipedia links! if((linkText.IndexOf(''('') > -1) && (linkText.IndexOf('')'') == -1)) linkText += ")"; System.Diagnostics.Process.Start(linkText); }