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);
}