Files
VisionEdit/UsingControl/HZHControls/Controls/Text/UCNumTextBox.cs
eggplantlwj 62477b8091 1、修复因加入输入位姿引发的BUG
2、PMA工具完善
3、其他BUG修复
2022-03-21 14:48:26 +08:00

365 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ***********************************************************************
// Assembly : HZH_Controls
// Created : 08-08-2019
//
// ***********************************************************************
// <copyright file="UCNumTextBox.cs">
// Copyright by Huang Zhenghui(黄正辉) All, QQ group:568015492 QQ:623128629 Email:623128629@qq.com
// </copyright>
//
// Blog: https://www.cnblogs.com/bfyx
// GitHubhttps://github.com/kwwwvagaa/NetWinformControl
// giteehttps://gitee.com/kwwwvagaa/net_winform_custom_control.git
//
// If you use this code, please keep this note.
// ***********************************************************************
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace HZH_Controls.Controls
{
/// <summary>
/// Class UCNumTextBox.
/// Implements the <see cref="System.Windows.Forms.UserControl" />
/// </summary>
/// <seealso cref="System.Windows.Forms.UserControl" />
[DefaultEvent("NumChanged")]
public partial class UCNumTextBox : UserControl
{
/// <summary>
/// Occurs when [show key border event].
/// </summary>
[Description("弹出输入键盘时发生"), Category("自定义")]
public event EventHandler ShowKeyBorderEvent;
/// <summary>
/// Occurs when [hide key border event].
/// </summary>
[Description("关闭输入键盘时发生"), Category("自定义")]
public event EventHandler HideKeyBorderEvent;
/// <summary>
/// Occurs when [number changed].
/// </summary>
[Description("数字改变时发生"), Category("自定义")]
public event EventHandler NumChanged;
/// <summary>
/// 输入类型
/// </summary>
/// <value>The type of the input.</value>
[Description("输入类型"), Category("自定义")]
public TextInputType InputType
{
get
{
return txtNum.InputType;
}
set
{
if (value == TextInputType.NotControl)
{
return;
}
txtNum.InputType = value;
}
}
/// <summary>
/// Gets or sets a value indicating whether this instance is number can input.
/// </summary>
/// <value><c>true</c> if this instance is number can input; otherwise, <c>false</c>.</value>
[Description("数字是否可手动编辑"), Category("自定义")]
public bool IsNumCanInput
{
get
{
return txtNum.Enabled;
}
set
{
txtNum.Enabled = value;
}
}
/// <summary>
/// 当InputType为数字类型时能输入的最大值
/// </summary>
/// <value>The maximum value.</value>
[Description("当InputType为数字类型时能输入的最大值。")]
public decimal MaxValue
{
get
{
return this.txtNum.MaxValue;
}
set
{
this.txtNum.MaxValue = value;
}
}
/// <summary>
/// 当InputType为数字类型时能输入的最小值
/// </summary>
/// <value>The minimum value.</value>
[Description("当InputType为数字类型时能输入的最小值。")]
public decimal MinValue
{
get
{
return this.txtNum.MinValue;
}
set
{
this.txtNum.MinValue = value;
}
}
/// <summary>
/// The key board type
/// </summary>
private KeyBoardType keyBoardType = KeyBoardType.UCKeyBorderNum;
/// <summary>
/// Gets or sets the type of the key board.
/// </summary>
/// <value>The type of the key board.</value>
[Description("键盘样式"), Category("自定义")]
public KeyBoardType KeyBoardType
{
get { return keyBoardType; }
set { keyBoardType = value; }
}
/// <summary>
/// Gets or sets the number.
/// </summary>
/// <value>The number.</value>
[Description("数值"), Category("自定义")]
public decimal Num
{
get { return txtNum.Text.ToDecimal(); }
set { txtNum.Text = value.ToString(); }
}
/// <summary>
/// 获取或设置控件显示的文字的字体。
/// </summary>
/// <value>The font.</value>
/// <PermissionSet>
/// <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// <IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode, ControlEvidence" />
/// <IPermission class="System.Diagnostics.PerformanceCounterPermission, System, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" />
/// </PermissionSet>
[Description("字体"), Category("自定义")]
public new Font Font
{
get
{
return txtNum.Font;
}
set
{
txtNum.Font = value;
}
}
/// <summary>
/// Occurs when [add click].
/// </summary>
[Description("增加按钮点击事件"), Category("自定义")]
public event EventHandler AddClick;
/// <summary>
/// Occurs when [minus click].
/// </summary>
[Description("减少按钮点击事件"), Category("自定义")]
public event EventHandler MinusClick;
private decimal increment = 1;
[Description("递增量大于0的数值"), Category("自定义")]
public decimal Increment
{
get { return increment; }
set
{
if (value <= 0)
return;
increment = value;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="UCNumTextBox" /> class.
/// </summary>
public UCNumTextBox()
{
InitializeComponent();
txtNum.TextChanged += txtNum_TextChanged;
}
/// <summary>
/// Handles the TextChanged event of the txtNum control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
void txtNum_TextChanged(object sender, EventArgs e)
{
if (NumChanged != null)
{
NumChanged(txtNum.Text.ToString(), e);
}
}
/// <summary>
/// The m FRM anchor
/// </summary>
Forms.FrmAnchor m_frmAnchor;
/// <summary>
/// Handles the MouseDown event of the txtNum control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="MouseEventArgs" /> instance containing the event data.</param>
private void txtNum_MouseDown(object sender, MouseEventArgs e)
{
if (IsNumCanInput)
{
if (KeyBoardType != HZH_Controls.Controls.KeyBoardType.Null)
{
switch (keyBoardType)
{
case KeyBoardType.UCKeyBorderAll_EN:
UCKeyBorderAll keyAll = new UCKeyBorderAll();
keyAll.RetractClike += (a, b) => { m_frmAnchor.Hide(); };
keyAll.EnterClick += (a, b) => { m_frmAnchor.Hide(); };
m_frmAnchor = new Forms.FrmAnchor(this, keyAll);
m_frmAnchor.VisibleChanged += m_frmAnchor_VisibleChanged;
m_frmAnchor.Show(this.FindForm());
break;
case KeyBoardType.UCKeyBorderNum:
UCKeyBorderNum keyNum = new UCKeyBorderNum();
keyNum.EnterClick += (a, b) => { m_frmAnchor.Hide(); };
m_frmAnchor = new Forms.FrmAnchor(this, keyNum);
m_frmAnchor.VisibleChanged += m_frmAnchor_VisibleChanged;
m_frmAnchor.Show(this.FindForm());
break;
}
}
}
}
/// <summary>
/// Handles the VisibleChanged event of the m_frmAnchor control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
void m_frmAnchor_VisibleChanged(object sender, EventArgs e)
{
if (m_frmAnchor.Visible)
{
if (ShowKeyBorderEvent != null)
{
ShowKeyBorderEvent(this, null);
}
}
else
{
if (HideKeyBorderEvent != null)
{
HideKeyBorderEvent(this, null);
}
}
}
/// <summary>
/// Numbers the add click.
/// </summary>
public void NumAddClick()
{
btnAdd_MouseDown(null, null);
}
/// <summary>
/// Numbers the minus click.
/// </summary>
public void NumMinusClick()
{
btnMinus_MouseDown(null, null);
}
/// <summary>
/// Handles the MouseDown event of the btnAdd control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="MouseEventArgs" /> instance containing the event data.</param>
private void btnAdd_MouseDown(object sender, MouseEventArgs e)
{
if (AddClick != null)
{
AddClick(this, e);
}
decimal dec = this.txtNum.Text.ToDecimal();
dec += increment;
txtNum.Text = dec.ToString();
}
/// <summary>
/// Handles the MouseDown event of the btnMinus control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="MouseEventArgs" /> instance containing the event data.</param>
private void btnMinus_MouseDown(object sender, MouseEventArgs e)
{
if (MinusClick != null)
{
MinusClick(this, e);
}
decimal dec = this.txtNum.Text.ToDecimal();
dec -= increment; ;
txtNum.Text = dec.ToString();
}
/// <summary>
/// Handles the Load event of the UCNumTextBox control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
private void UCNumTextBox_Load(object sender, EventArgs e)
{
this.txtNum.BackColor = this.BackColor;
}
/// <summary>
/// Handles the FontChanged event of the txtNum control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
private void txtNum_FontChanged(object sender, EventArgs e)
{
txtNum.Location = new Point(txtNum.Location.X, (this.Height - txtNum.Height) / 2);
}
/// <summary>
/// Handles the BackColorChanged event of the UCNumTextBox control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
private void UCNumTextBox_BackColorChanged(object sender, EventArgs e)
{
Color c = this.BackColor;
Control control = this;
while (c == Color.Transparent)
{
control = control.Parent;
if (control == null)
break;
c = control.BackColor;
}
if (c == Color.Transparent)
return;
txtNum.BackColor = c;
}
}
}