Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c语言中以消息形式显示指向路径的链接#_C#_Winforms_Hyperlink - Fatal编程技术网

C# 在c语言中以消息形式显示指向路径的链接#

C# 在c语言中以消息形式显示指向路径的链接#,c#,winforms,hyperlink,C#,Winforms,Hyperlink,我有一个用C#编写的桌面应用程序。在这个应用程序中,我有一个表单,可以显示不同的消息。 我有一条消息说:“输出文件是在C:\Work\result.txt中生成的”。 如何将文件的此路径显示为链接,以及何时显示包含此消息的表单以将路径视为链接,以及何时用户单击该链接以打开指定的路径/文件 我试过: The output file was generated in : <a href=/" C:\Work\result.txt/">C:\Work\result.txt</a&g

我有一个用C#编写的桌面应用程序。在这个应用程序中,我有一个表单,可以显示不同的消息。 我有一条消息说:“输出文件是在C:\Work\result.txt中生成的”。 如何将文件的此路径显示为链接,以及何时显示包含此消息的表单以将路径视为链接,以及何时用户单击该链接以打开指定的路径/文件

我试过:

The output  file was generated in : <a href=/" C:\Work\result.txt/">C:\Work\result.txt</a>
输出文件是在以下位置生成的:
但是不起作用


谢谢

可以为onclick创建一个事件,然后使用下面的代码打开文件

System.Diagnostics.Process.Start(@"C:\Work\result.txt"); //or like
System.Diagnostics.Process.Start(@"C:\Work\result.docx");
这里,文件必须有默认程序。然后,只有shell会运行相关的程序从注册表中读取它,就像在资源管理器中通常双击一样。

MessageBox.Show()方法采用对话框的标题、文本、图标、按钮和默认按钮。但是,.NET Framework文档中没有提到任何关于向MessageBox添加链接的内容

但是,您可以通过创建从System.Windows.Forms.Form继承的新类并添加按钮(或者更多按钮)、图标、标签和链接按钮来实现所需的效果。然后使用Form类的ShowDialog()方法以模态形式显示消息框。您还可以创建一个名为MyErrorBox的类(C#2中的静态类或C#1中密封的静态类),该类只包含一个名为Show()的静态方法,该方法创建表单,添加所需控件并以模态模式显示表单。最后一种方法的演示如下所示。然后你可以随时随地使用这个类

using System;
using System.Windows.Forms;
using System.Drawing;

namespace MessageBoxes{
public sealed class MyErrorBox{

private MyErrorBox(){}
private static Form frm;
private static string detailsStore;
private static TextBox txt;

public static DialogResult Show(string caption, string text, string details, Icon icon){

    frm = new Form(); frm.Size = new Size(510, 195);
    frm.Text = caption; frm.ShowInTaskbar = false; frm.ControlBox = false;
    frm.FormBorderStyle = FormBorderStyle.FixedDialog;
    PictureBox icon1 = new PictureBox(); icon1.Location = new Point(8,16);
    icon1.Size = new Size(icon.Width, icon.Height);
    icon1.Image = icon.ToBitmap();
    frm.Controls.Add(icon1);
    Label lbl = new Label(); lbl.Text = text; lbl.Location = new Point(88,8);
    lbl.Size = new Size(400,88); frm.Controls.Add(lbl);
    LinkLabel btn1 = new LinkLabel(); btn1.Text = "View Details";
    btn1.Size = new Size(72,23); btn1.Location = new Point(416,96);
    btn1.Click += new EventHandler(btn1_Click); frm.Controls.Add(btn1);
    //Ofcourse you can add more buttons than just the ok with more DialogResults
    Button btn2 = new Button(); btn2.Text = "&Ok";
    btn2.Size = new Size(72,23); btn2.Location = new Point(224,130);
    btn2.Anchor = AnchorStyles.Bottom; frm.Controls.Add(btn2);
    frm.AcceptButton = btn2; btn2.Click += new EventHandler(btn2_Click);
    btn2.DialogResult = DialogResult.OK; detailsStore = details;
    return frm.ShowDialog();

 }

private static void btn1_Click(object sender, EventArgs e) {

    frm.Size = new Size(510,320);
    txt = new TextBox(); txt.Multiline = true;
    txt.ScrollBars = ScrollBars.Both; txt.Text = detailsStore;
    txt.Size = new Size(488,128); txt.Location = new Point(8,120);
    txt.ReadOnly = true; frm.Controls.Add(txt);
    LinkLabel lnk = (LinkLabel)(sender); lnk.Text = "Hide Details";
    lnk.Click -= new EventHandler(btn1_Click);
    lnk.Click += new EventHandler(btn1_ReClick);

}

private static void btn2_Click(object sender, EventArgs e) {

    frm.Close();

}

private static void btn1_ReClick(object sender, EventArgs e) {

    frm.Controls.Remove(txt); frm.Size = new Size(510, 195);
    LinkLabel lnk = (LinkLabel)(sender); lnk.Text = "View Details";
    lnk.Click -= new EventHandler(btn1_ReClick);
    lnk.Click += new EventHandler(btn1_Click);

   }

  }
 }

没有标准的MessageBox功能可以通过链接标签实现这一点。我建议您使用是/否消息框按钮,然后从所选选项应用事件

大概是这样的:

if (MessageBox.Show(
    "The file is saved at the following link: link here", "Success", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk
) == DialogResult.Yes)
{
System.Diagnostics.Process.Start(@"C:\TestLocation\SavedFiles");
}

我会的help@wonko79当然,但是
LinkLabel
应该添加到标准表单中,而不是MessageBox窗口中。我认为在.NET中不能有这样的
MessageBox
,解决方案是自定义您自己的MessageBox或使用第三方的MessageBox。如果我有以下消息,我如何使用Linklabel:我的第一个文件位于位置path1,我的第二个文件位于位置path2,我的第三个文件位于位置path3…我的消息可能会有所不同。我的表单有一个显示消息的标签和一个图标(成功或错误消息)+好的,恐怕不行。但是,自己构建一个类似表单的MessageBox是非常容易的。您可以使用LinkLabel控件添加超链接。您误解了OP的问题,他不想知道如何打开与链接关联的文件。他想在
消息框中显示链接。标准的
MessageBox
无法以这种方式工作,解决方案是尝试使用第三方UI库,该库支持某种具有丰富功能的MessageBox,允许用户格式化和定义文本外观。OP:“如何将文件的此路径显示为链接,以及何时显示包含此消息的表单以将路径视为链接,以及何时用户单击该链接以打开指定的路径/文件“-使用CONTL,在
链接上单击
事件,使用上述代码打开文件。”@金刚:不是
消息框
,在
表单
上带有此
消息
。在这里,
LinkLabel
可以用来制作一个表单,在我显示的消息中有标签和图片。我的消息各不相同,在一条消息中我可以有一条或三条路径。这就是我认为我不能使用LinkLabel的原因