← 返回所有博客文章

仅用30行代码可以实现一个计算器的功能吗?答案是,当然可以,因为我们有Spread控件。

Spread XAML控件(Spread WinRT和SpreadWPF-Silverlihgt)给我们带来了丰富的数据可视化和计算能力。可以创建自定义的计算器,动态交互式的仪表板程序,丰富多彩的报表等等。Spread所提供的API包括了Spread文档的完整对象模型,此外,还包括丰富的事件。Spread XAML控件包括功能强大的Spread设计器工具,通过设计器您可以创建和设计和Excel一模一样的用户界面,而且在设计时无须编写一行代码。您修改并保存电子表格模板之后,您可以运行时动态的加载这些模板到您的系统中。

下面将要展示的这个例子如何使用Spread设计器以及30行中有的代码来实现一个计算器,本文使用的是Spread WinRT控件。

 

首先,我们在VS2012中创建一个Window Store App工程:

然后将GcSpreadSheet控件添加到设计界面:

在控件上点击右键,选择Create a new document菜单项,然后会自动创建一个名为spreadsheet1.ssxaml文档,并自动设置到DocumentUri属性中:

然后,Spread设计器将会自动打开,然后您可以设计一个计算器的用户界面,最终效果如下:

接下来,我们添加CellClick事件,代码如下:

<UI:GcSpreadSheet x:Name="gcSpreadSheet1" Width="490" Height="730" DocumentUri="ms-appx:///Spread Documents/spreadsheet1.ssxml" CellClick="gcSpreadSheet1_CellClick"/>

void gcSpreadSheet1_CellClick(object sender, CellClickEventArgs e)
{
    var sheet = this.gcSpreadSheet1.ActiveSheet;
    if (e.Column == 4 && e.Row == 7) //=
    {
        sheet[2, 1].Formula = "";
        try
        {
            sheet[2, 1].Formula = sheet[1, 1].Text;
        }
        catch
        {
            sheet[2, 1].Text = "Invalid Formula!";
        }
    }
    else if (e.Column == 1 && e.Row == 3) //C
    {
        sheet[1, 1].ResetText();
        sheet[2, 1].ResetText();
        sheet[2, 1].Formula = "";
    }
    else if (e.Column == 3 && e.Row == 3) //BS
    {
        var txt = sheet[1, 1].Text;
        if (txt == string.Empty) return;
        sheet[1, 1].Text = txt.Substring(0, txt.Length - 1);
    }
    else if (e.Column > 0 && e.Column < 5 && e.Row > 3 && e.Row < 9) //digits and signs
    {
        sheet[1, 1].Text = sheet[1, 1].Text + sheet[e.Row, e.Column].Text;
        sheet[2, 1].ResetText();
        sheet[2, 1].Formula = "";
    }
}

 

最终运行效果如下:

Spread WPF-Silverlight 产品介绍:

http://www.grapecity.com.cn/developer/Spwpf_overview.htm

源码下载:

 

 

App7.zip (24.81 kb)