2013-06-20 41 views
1

我在C#中有一個桌面應用程序。在此我有一個窗體,其中顯示不同的消息。 我有一個消息說:「輸出文件生成在:C:\ Work \ result.txt」。 如何顯示此文件路徑作爲鏈接,以及何時顯示帶有此消息的窗體將路徑看作鏈接,以及何時用戶單擊鏈接以打開指定的路徑/文件?在c#中的消息窗體中顯示指向路徑的鏈接#

我想:

The output file was generated in : <a href=/" C:\Work\result.txt/">C:\Work\result.txt</a> 

但不起作用。

謝謝!

+0

月LinkLabel的幫助 – wonko79

+0

@當然wonko79,但'LinkLabel'應該被加入到標準的形式,而不是在MessageBox窗口。 –

+0

我想你不能在.NET中擁有這樣一個'MessageBox',解決方案是自定義你自己的MessageBox或者使用第三方的MessageBox。 –

回答

2

您可以使用on-onclick事件,然後使用下面的代碼打開文件。

System.Diagnostics.Process.Start(@"C:\Work\result.txt"); //or like 
System.Diagnostics.Process.Start(@"C:\Work\result.docx"); 

在這裏,該文件的默認程序必須存在。然後,只有shell會運行相關程序從註冊表中讀取它,就像通常在瀏覽器中雙擊一樣。

+0

你誤解了OP的問題,他不想知道如何打開與鏈接相關的文件。他想要在「MessageBox」中顯示鏈接。標準的'MessageBox'不能以這種方式工作,解決方案是嘗試使用第三方UI庫,該庫支持某種具有豐富功能的MessageBox,允許用戶格式化和定義文本的外觀。 –

+0

OP:「如何顯示此文件路徑作爲鏈接,並且當帶有此消息的表單將鏈接看作鏈接,並且用戶單擊鏈接打開指定的路徑/文件時 - 」使用[ LinkLabel](http://www.csharphelp.com/2006/06/an-overview-of-link-label-in-c/)控制,在LinkClick事件中,使用上述代碼打開文件.. @KingKong:不是'MessageBox',在帶有'Message'的'Form'上。在這裏,可以使用'LinkLabel' – Paritosh

+0

我用一個標籤和一張圖片製作了一張表格,顯示了該信息。我的消息各不相同,在一條消息中,我可以有一個或三個路徑。這就是我認爲我不能使用linklabel的原因 – user1577242

0

MessageBox.Show()方法需要有.NET框架文件中所提沒什麼可說的有關添加鏈接到一個消息框

但是任何東西dialog.However的標題,文字,圖標,按鈕和默認按鈕,你可以通過創建一個從System.Windows.Forms.Form繼承的新類並添加一個按鈕(或者更多如果你喜歡的),一個圖標,一個標籤和一個LinkBut​​ton來達到你想要的效果。然後使用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); 

    } 

    } 
}