323 lines
8.1 KiB
C#
323 lines
8.1 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.Design;
|
|
using DevComponents.DotNetBarKnobControl.Design.Properties;
|
|
|
|
namespace DevComponents.Instrumentation.Design
|
|
{
|
|
[ToolboxItem(false)]
|
|
public partial class FormatStringDropDown : UserControl
|
|
{
|
|
#region Private variables
|
|
|
|
private string _FormatString;
|
|
private bool _EscapePressed;
|
|
|
|
private IWindowsFormsEditorService _EditorService;
|
|
private ITypeDescriptorContext _Context;
|
|
|
|
private string[] _Items = new string[] {
|
|
"Custom",
|
|
"Currency",
|
|
"Decimal",
|
|
"Fixed-point",
|
|
"General",
|
|
"Hexadecimal",
|
|
"Number",
|
|
"Percent",
|
|
"Scientific"};
|
|
|
|
private Format[] _Formats = new Format[] {
|
|
new Format("", (string)(Resources.ResourceManager.GetObject("CustomDesc"))),
|
|
new Format("C", (string)(Resources.ResourceManager.GetObject("CurrencyDesc"))),
|
|
new Format("D", (string)(Resources.ResourceManager.GetObject("DecimalDesc"))),
|
|
new Format("F", (string)(Resources.ResourceManager.GetObject("FixedPointDesc"))),
|
|
new Format("G", (string)(Resources.ResourceManager.GetObject("GeneralDesc"))),
|
|
new Format("X", (string)(Resources.ResourceManager.GetObject("HexadecimalDesc"))),
|
|
new Format("N", (string)(Resources.ResourceManager.GetObject("NumericDesc"))),
|
|
new Format("P", (string)(Resources.ResourceManager.GetObject("PercentDesc"))),
|
|
new Format("E", (string)(Resources.ResourceManager.GetObject("ExponentialDesc")))};
|
|
|
|
#endregion
|
|
|
|
public FormatStringDropDown()
|
|
{
|
|
InitFormatList();
|
|
}
|
|
|
|
public FormatStringDropDown(string formatString,
|
|
IWindowsFormsEditorService editorService, ITypeDescriptorContext context)
|
|
{
|
|
_FormatString = formatString;
|
|
|
|
_EditorService = editorService;
|
|
_Context = context;
|
|
|
|
InitFormatList();
|
|
|
|
BackColor = SystemColors.Control;
|
|
}
|
|
|
|
#region InitFormatList
|
|
|
|
private void InitFormatList()
|
|
{
|
|
InitializeComponent();
|
|
|
|
_CbxFmtType.DrawMode = DrawMode.OwnerDrawFixed;
|
|
_CbxFmtType.DrawItem += CbxFmtType_DrawItem;
|
|
|
|
_CbxFmtType.Items.AddRange(_Items);
|
|
_CbxFmtType.SelectedIndex = 3;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Public properties
|
|
|
|
#region FormatString
|
|
|
|
public string FormatString
|
|
{
|
|
get { return (_FormatString); }
|
|
|
|
set
|
|
{
|
|
_FormatString = value;
|
|
|
|
_Context.OnComponentChanging();
|
|
_Context.PropertyDescriptor.SetValue(_Context.Instance, value);
|
|
_Context.OnComponentChanged();
|
|
|
|
Invalidate();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EditorService
|
|
|
|
public IWindowsFormsEditorService EditorService
|
|
{
|
|
get { return (_EditorService); }
|
|
set { _EditorService = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region EscapePressed
|
|
|
|
public bool EscapePressed
|
|
{
|
|
get { return (_EscapePressed); }
|
|
set { _EscapePressed = value; }
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#region CbxFmtType_DrawItem
|
|
|
|
void CbxFmtType_DrawItem(object sender, DrawItemEventArgs e)
|
|
{
|
|
e.DrawBackground();
|
|
|
|
if (e.Index == 0)
|
|
{
|
|
e.Graphics.DrawLine(Pens.Gainsboro, new Point(e.Bounds.Left, e.Bounds.Bottom - 1),
|
|
new Point(e.Bounds.Right, e.Bounds.Bottom - 1));
|
|
}
|
|
|
|
TextRenderer.DrawText(e.Graphics, _CbxFmtType.Items[e.Index].ToString(),
|
|
_CbxFmtType.Font, e.Bounds, _CbxFmtType.ForeColor, TextFormatFlags.Left);
|
|
|
|
e.DrawFocusRectangle();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region TextBoxKeyPress
|
|
|
|
private void TextBoxKeyPress(object sender, KeyPressEventArgs e)
|
|
{
|
|
e.Handled = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region CbxFmtType_SelectedIndexChanged
|
|
|
|
private void CbxFmtType_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if ((uint)_CbxFmtType.SelectedIndex < _Formats.Length)
|
|
{
|
|
Format fmt = _Formats[_CbxFmtType.SelectedIndex];
|
|
|
|
_LbDescription.Text = fmt.Description;
|
|
|
|
UpdateSample();
|
|
}
|
|
else
|
|
{
|
|
_TbSample.Text = "";
|
|
_LbDescription.Text = "";
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region UpdateSample
|
|
|
|
private void UpdateSample()
|
|
{
|
|
if (_CbxFmtType.SelectedIndex == 0)
|
|
{
|
|
_TbCustom.Visible = true;
|
|
_TbPrecision.Visible = false;
|
|
_LbPrecision.Text = @"Format String:";
|
|
|
|
UpdateCustomSample();
|
|
}
|
|
else if (_CbxFmtType.SelectedIndex > 0)
|
|
{
|
|
_TbPrecision.Visible = true;
|
|
_TbCustom.Visible = false;
|
|
_LbPrecision.Text = @"Precision:";
|
|
|
|
UpdateNumericSample();
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region UpdateCustomSample
|
|
|
|
private void UpdateCustomSample()
|
|
{
|
|
_FormatString = _TbCustom.Text;
|
|
|
|
try
|
|
{
|
|
_TbSample.Text = String.Format("{0:" + _FormatString + "}", 1234567890);
|
|
}
|
|
catch
|
|
{
|
|
_TbSample.Text = @"Invalid Format String.";
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region UpdateNumericSample
|
|
|
|
private void UpdateNumericSample()
|
|
{
|
|
Format fmt = _Formats[_CbxFmtType.SelectedIndex];
|
|
|
|
try
|
|
{
|
|
int precision = GetPrecision();
|
|
|
|
_FormatString = fmt.FormatCode + precision.ToString();
|
|
|
|
_TbSample.Text = String.Format("{0:" + _FormatString + "}", 1234567890);
|
|
}
|
|
catch
|
|
{
|
|
_TbSample.Text = @"Invalid Format String.";
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region GetPrecision
|
|
|
|
private int GetPrecision()
|
|
{
|
|
int precision;
|
|
|
|
if (int.TryParse(_TbPrecision.Text, out precision))
|
|
return (precision < 0 ? 0 : precision > 99 ? 99 : precision);
|
|
|
|
return (0);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region MyTextChanged
|
|
|
|
private void MyTextChanged(object sender, EventArgs e)
|
|
{
|
|
UpdateSample();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region BtnOk_Click
|
|
|
|
private void BtnOk_Click(object sender, EventArgs e)
|
|
{
|
|
_EditorService.CloseDropDown();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region BtnCancel_Click
|
|
|
|
private void BtnCancel_Click(object sender, EventArgs e)
|
|
{
|
|
_EscapePressed = true;
|
|
_EditorService.CloseDropDown();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region MyPreviewKeyDown
|
|
|
|
private void MyPreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
|
|
{
|
|
if (e.KeyCode == Keys.Escape)
|
|
_EscapePressed = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Format
|
|
|
|
private class Format
|
|
{
|
|
#region Private variables
|
|
|
|
private string _FormatCode;
|
|
private string _Description;
|
|
|
|
#endregion
|
|
|
|
public Format(string formatCode, string description)
|
|
{
|
|
_FormatCode = formatCode;
|
|
_Description = description;
|
|
}
|
|
|
|
#region Public properties
|
|
|
|
public string FormatCode
|
|
{
|
|
get { return (_FormatCode); }
|
|
}
|
|
|
|
public string Description
|
|
{
|
|
get { return (_Description); }
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|