2009-09-17 39 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

相关问题