2009-09-17 75 views
1

我有一個簡單的小應用程序,對我們所有的公司客戶進行一些分析,並根據他們的活動(認爲「交通燈」幸福系統)爲每個客戶生成一個分數。如何在.Net表單上顯示格式化的信息?

生成的分數從各種指標中獲取信息,並吐出可能是任意幻數的信息。

我想以容易消耗的方式呈現算法結果。

目前,我正在使用一個簡單的HTML文檔顯示在網絡瀏覽器控件中,由每個記錄的算法生成。

例如,輸出如下所示:

 
A meeting gives 20 points.  Have 1 meeting.  20 points. 
Each phonecall gives 5 points. Have 5 phone calls. 25 points. 
Each purchase gives 10 points. Have 2 purchases. 20 points. 

(在現實中,也有顏色上的關鍵字也有些微妙的亮點)

是一個嵌入式的Web瀏覽器控件,通過產生的填充HTML,真的是實現這種事情的最佳方式?這似乎有點不對。

目前使用winforms,但因爲它是一個新的,內部和簡單的應用程序,可以切換到WPF如果更合適。

回答

2

如果你不使用WPF,那麼答案是肯定的。這是做這件事的最佳方式,特別是因爲格式化。

雖然WPF將是一個更好的主意,所以如果可以的話,繼續前進。 XAML是你的朋友。


編輯:

Righto,所以如果這是一個WPF應用程序,你可以使用,例如,一個Grid給自己正確的列和行格式化你的需要。然後,從這一點開始,您可以添加一個LabelTextBox(後者的格式化功能較少),並根據需要擴展控件ControlTemplate或簡單地添加Style

現在,如果您想要對接收的值進行條件格式化,可以使用DataTemplateDataTrigger來顯示樣式,具體取決於數據。

基本上,WPF將爲您提供更多的靈活性,健壯性和學習效果,而不是使用WebBrowser控件和一些好的HTML。

PS:您還可以對DataGrid控件進行模板設置並將其設置風格以滿足您的需求,或者甚至爲多種顯示類型動態加載ResourceDictionary。 WPF非常靈活。

+1

XAML可能是我的朋友,但它會很高興知道他如何會幫助我。 – tvanfosson 2009-09-17 11:28:22

+0

+1更新 – tvanfosson 2009-09-17 11:53:12

+0

感謝 - 很多信息!聽起來像我現在選擇使用HTML和winforms之間,我知道這兩個,可以快速完成,或使用此作爲學習WPF的藉口:) – Cylindric 2009-09-17 12:00:19

0

您可以使用RichTextBox類。它可以顯示格式化文本(與寫字板完全一樣),但您必須爲此課程提供Rtf格式。如果你只有HTML,瀏覽器是個好主意。

0

我會從建築的角度來看它。

您可以考慮某種可配置的模板化方案,並在任何表示層中實現它。

即,模板存儲在xml或數據庫中,並且表示層理解如何呈現數據。

因此您可以輕鬆切換到任何適合的演示文稿。

0

您可以使用GDI並從自定義控件中的paint方法執行此操作。不過這很多格式化代碼要寫!

在過去,我已經使用HTML + webbrowser控件這種事情,沒有很多問題。

RickTextBox控件顯示格式化文本,但可能很難使用,(我假設你已經知道了一些HTML)。 RickTextBox控件也不像HTML那樣靈活。

你可以使用WPF和XAML,它可以很好地完成這個任務。然而,你將不得不先學習WPF ...

因此,我認爲HTML +網頁瀏覽器控制是你最好的選擇。

0

我會用WebBrowser控件做這樣的事情:

private void Form1_Load(object sender, EventArgs e) 
    { 
     StringBuilder sb = new StringBuilder(); 

     sb.AppendLine("<table style='width:100%;'>"); 

     sb.AppendLine("<tr>"); 
     // A meeting gives 20 points.  Have 1 meeting.  20 points. 
     sb.AppendLine(AddTableDefinition(20, 1, "meeting")); 
     sb.AppendLine("</tr><tr>"); 
     // Each phonecall gives 5 points. Have 5 phone calls. 25 points. 
     sb.AppendLine(AddTableDefinition(5, 5, "phone call")); 
     sb.AppendLine("</tr><tr>"); 
     // Each purchase gives 10 points. Have 2 purchases. 20 points. 
     sb.AppendLine(AddTableDefinition(10, 2, "purchase")); 
     sb.AppendLine("</tr>"); 

     sb.AppendLine("</table>"); 

     webBrowser1.DocumentText = sb.ToString(); 
    } 

    private string AddTableDefinition(int pointsPerUnit, int units, string word) 
    { 
     return 
      String.Format(
       "<td>A <strong>{0}</strong> gives <strong>{2}</strong> points.</td><td>Have <strong>{3}</strong> {1}.</td><td><strong>{4} points</strong>.</td>", 
        word, (units > 1) ? word + "s" : word, 
        pointsPerUnit, units, pointsPerUnit * units); 
    } 

結束了像

alt text http://www.balexandre.com/temp/2009-09-17_1342.png

+0

這就是我現在正在做的。它工作正常(雖然我有一個問題讓webbrowser控件行爲),但我想確保我沒有做一些奇特的事情。 – Cylindric 2009-09-17 12:01:15

+0

只要你填寫一個HTML元素,你甚至可以將CSS包含到WebBrowser.DocumentText中,你會沒事的。 – balexandre 2009-09-17 12:33:53