Pocket Fuzzy Quotient Calculator






2.95/5 (21投票s)
袖珍模糊商计算器是一个 .NET Compact Framework 示例应用程序,它根据你的心情计算你的 FQ。
引言
袖珍模糊商计算器是一个 .NET Compact Framework 示例应用程序,允许你根据一天中的心情输入你对各种主题的看法。然后它会计算你的总体 FQ,或模糊商。该程序灵感来自生物节律、幸运饼干和星座运势。
在此过程中,感兴趣的编码主题包括
- 如何为 PocketPC 创建应用程序
- 使用 XML 数据集配置和生成用户界面控件
- 派生一个新的控件来显示颜色渐变
使用代码
该应用程序是使用 Visual Studio 2003 中的“文件”>“新建项目”>“智能设备应用程序”创建的。这为我们提供了主窗体和主菜单。模糊商主显示需要显示主题控件,这些控件可以滚动以包含任意数量的主题。为了实现这一点,创建了一个基于 Panel 的类,名为 AutoScrollPanel
,并将其添加到主窗体中。这个类基本上是带有滚动条的两个嵌套面板。它的工作原理如下。
namespace FuzzyQuotient
{
public class AutoScrollPanel : Panel
{
public Panel Contents
{
get { return contents; }
}
Panel contents;
VScrollBar vScroll;
public AutoScrollPanel()
{
// create a scroll bar
this.vScroll = new VScrollBar();
this.vScroll.Parent = this;
this.vScroll.Visible = true;
this.vScroll.Minimum = 0;
this.vScroll.SmallChange = 20;
this.vScroll.ValueChanged +=
new EventHandler (this.scrollbar_ValueChanged);
// create the contents panel that holds the controls to scroll
this.contents = new Panel();
this.contents.Parent = this;
this.contents.Width =
this.ClientSize.Width - this.vScroll.Size.Width;
}
...
接下来,需要从 XML 文件加载主题配置数据,以便创建添加到滚动面板中的主题控件。为配置 XML 选择以下模式
<?xml version="1.0" encoding="utf-8" ?>
<Topics>
<Topic>
<Name>Mood</Name>
<Values>
<Value>
<Score>1</Score>
<Text>Sad</Text>
</Value>
<Value>
<Score>10</Score>
<Text>Happy</Text>
</Value>
</Values>
</Topic>
<Topic>
<Name>Weather</Name>
<Values>
<Value>
<Score>1</Score>
<Text>Lousy</Text>
</Value>
<Value>
<Score>10</Score>
<Text>Really, Really Nice!</Text>
</Value>
</Values>
</Topic>
</Topics>
然后将此 XML 读取到 DataSet 类中。“Topics”表被扫描,并根据数据构建控件行。每个主题的颜色范围需要显示为渐变,但不幸的是,Graphics 类在紧凑框架上并不直接支持渐变画笔。因此,我决定编写自己的 GradientControl
,并使用自定义 OnPaint 消息来处理它。
using System;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
namespace FuzzyQuotient
{
public class GradientControl
: Control { public
Color
Start = Color.Blue; public Color
End = Color.Red; private const
int STEPS = 20; public GradientControl()
{
}
protected override void OnPaint (PaintEventArgs e)
{
Pen blackPen = new Pen (System.Drawing.Color.Black);
// step through each of the color components
int step = Width / STEPS;
float startR = (float) Start.R;
float stepR = ((float) End.R - (float) Start.R) / (float) STEPS;
float startG = (float) Start.G;
float stepG = ((float) End.G - (float) Start.G) / (float) STEPS;
float startB = (float) Start.B;
float stepB = ((float) End.B - (float) Start.B) / (float) STEPS;
// draw each color band one at a time
for (int i = 0; i < Width; i += step)
{
e.Graphics.FillRectangle(new SolidBrush(
Color.FromArgb((int)startR, (int)startG, (int)startB)),
i, 0, step, Height);
if ((stepR > 0 && (startR < End.R)) ||
(stepR < 0 && (startR > End.R)))
startR += stepR;
if ((stepG > 0 && (startG < End.G)) ||
(stepG < 0 && (startG > End.G)))
startG += stepG;
if ((stepB > 0 && (startB < End.B)) ||
(stepB < 0 && (startB > End.B)))
startB += stepB;
}
//draw the border
e.Graphics.DrawRectangle (blackPen, 0, 0,
this.ClientRectangle.Width - 1,
this.ClientRectangle.Height - 1);
}
}
}
就这样!
FQ 计算按钮现在只是取平均分,但你可以看到很容易将其进一步扩展并做一些有趣的事情。
未来的增强
- 添加一个配置对话框来设置要跟踪的主题
- 将分数数据保存到 XML 数据集
- 按日期跟踪你的分数
- 使用真实的模糊逻辑计算
- 将输入的数据与桌面应用程序同步
- 将结果发布到 Web 应用程序
- 查看其他用户输入的分数,按:朋友、邮政编码、州、国家/地区分组
- 绘制美国地图,显示每个州平均分数的颜色,并按每个主题进行动画显示