C# 弹出式计算器、按钮和文本控件
一个弹出式计算器窗体,以及相应的按钮和文本控件。
引言
我需要一个可以自行处理格式化的弹出式计算器。当然,作为我这样精打细算的人,我不想为此付费。这个计算器以及相关的按钮和文本控件,可以处理从关联控件解析和格式化文本值。它还提供了许多样式选择。
使用代码
使用这个计算器非常简单:将 CalculatorButton 或 CalculatorTextBox 拖放到您的窗体上。如果使用 CalculatorButton,您必须为按钮提供一个 ResultControl,以便获取和设置其文本。唯一需要解释的是 CalculatorParse
和 CalculatorFormat
事件。基本上,您可以在计算器弹出时(CalculatorParse)和/或关闭时(CalculatorFormat)拦截这些事件。以下是一些展示如何使用这些事件的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using PopCalc.Library;
namespace PopCalc.Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void m_BoxParse_CalculatorParse(
object sender, CalculatorParseEventArgs e)
{
CultureInfo c = CultureInfo.CurrentCulture;
string cs = c.NumberFormat.CurrencySymbol;
string ns = c.NumberFormat.NegativeSign;
string parsed = e.Original;
if (parsed.Contains(cs))
parsed = parsed.Replace(cs, "");
if (parsed.StartsWith("(") && parsed.EndsWith(")"))
parsed = ns + parsed.Replace("(", "").Replace(")", "");
e.Parsed = parsed;
}
private void m_BoxParse_CalculatorFormat(
object sender, CalculatorFormatEventArgs e)
{
e.FormattedResult = e.Result.ToString("c");
}
}
}
CalculatorParseEventArgs
类有一个 Original
属性(字符串,只读),它是从关联的控件(通常是 TextBox)获取的值。您可以查看此 Original
属性并更改文本,然后设置事件参数的 Parsed
属性(字符串,可读写)。
CalculatorFormatEventArgs
类有一个 Result
属性(双精度浮点数,只读),您可以使用它来设置 FormattedResult
属性(字符串,可读写)。再次强调,CalculatorParse
事件在从您的控件检索文本之前调用;CalculatorFormat
事件在将结果推回您的控件之前调用。
关注点
编写这段代码最有趣的地方在于,我发现继承自 Control
而不是更派生的类,在格式化方面具有更大的灵活性。因此,CalculatorButton 不继承自 Button
,而是继承自 Control
。
历史
- 版本 1.0,发布于 2007 年 4 月 10 日。
- 已更新。添加了小数分隔符的区域设置处理,稍微紧凑了显示,并将 CalculatorPanel 上的 AutoScale 设置为 None,这样按钮的字体更改就不会改变窗体面板的大小。
- 更新于 2007 年 4 月 11 日。如果计算器检测到它触及了屏幕工作区域的底部,它现在将移动到控件的顶部。
- 更新于 2007 年 4 月 11 日。修复了在非模式 MdiClient 窗体中使用时的定位错误。
- 更新于 2007 年 5 月 29 日。文章已编辑并发布到 CodeProject.com 的主文章数据库。