如何在.Net表单上呈现格式化信息?

时间:2009-09-17 11:22:00

标签: .net winforms user-interface

我有一个简单的小应用程序,对我们所有的公司客户进行一些分析,并根据他们的活动为每个客户生成一个分数(想想“红绿灯”幸福系统)。

生成的分数从各种指标中获取信息,并吐出可能看似任意幻数的内容。

我想以一种容易消费的方式呈现算法结果。

目前,我正在使用Web浏览器控件中显示的简单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。

5 个答案:

答案 0 :(得分:2)

如果你没有使用WPF,那么答案是肯定的。这是最好的方法,特别是因为格式化。

WPF会是一个更好的主意,所以如果可以,继续前进。 XAML是你的朋友。


编辑:

Righto,所以如果这是一个WPF应用程序,你可以使用Grid为自己提供所需的正确的列和行格式。然后,从这一点开始,您可以添加LabelTextBox(后者的格式化能力较低)并扩展控件ControlTemplate,或者只需添加Style根据你需要什么。

现在,如果您想对收到的值执行类似条件格式设置的操作,可以使用带有DataTemplate的{​​{1}}来显示样式,具体取决于数据

基本上,WPF将为您提供更多的灵活性,健壮性和学习成绩,而不是使用DataTrigger控件和一些优秀的HTML。

PS:您还可以对WebBrowser控件进行模板化并对其进行样式化以满足您的需求,甚至可以为多种显示类型动态加载DataGrid。 WPF非常灵活。

答案 1 :(得分:0)

您可以使用RichTextBox类。它可以显示格式化文本(与写字板完全相同),但您必须为此类提供Rtf格式。如果你只有HTML,浏览器是个好主意。

答案 2 :(得分:0)

我将从架构的角度来看待它。

您可以考虑某种可配置的模板化方案,并在任何表示层中实现它。

即模板存储在xml或数据库中,表示层理解如何呈现数据。

这样您就可以轻松切换到任何合适的演示文稿。

答案 3 :(得分:0)

您可以使用GDI并在自定义控件中使用paint方法执行此操作。不过这要编写很多格式代码!

过去我使用HTML + webbrowser控件进行此类操作,没有太多问题。

RickTextBox控件显示格式化文本,但可能更难使用,(我假设您已经知道一些HTML)。 RickTextBox控件也不像HTML那样灵活。

您可以将WPF与XAML一起使用,它可以很好地完成此任务。但是你必须先学习WPF ......

因此我认为HTML + webbrowser控件是您的最佳选择。

答案 4 :(得分: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