进出口新的节目,我不很懂,但我正在做一个计算器,我想用一个文本框,只有acepts数和小数,而当从剪贴板用户粘贴文本的文本框中删除任何文字字符,如MS计算。数字文本框
请花时间来解释每一个部分,所以我可以学习或写出来,并告诉我要搜索什么。
感谢
编辑:我会让它更加具体:
如何让C#中的数字文本框?我使用了蒙面文本框,但它不会带小数。
我读过的东西有关重载方法的OnKeyPress所以这将纠正任何错误的字符,但我不知道该怎么办了。
进出口新的节目,我不很懂,但我正在做一个计算器,我想用一个文本框,只有acepts数和小数,而当从剪贴板用户粘贴文本的文本框中删除任何文字字符,如MS计算。数字文本框
请花时间来解释每一个部分,所以我可以学习或写出来,并告诉我要搜索什么。
感谢
编辑:我会让它更加具体:
如何让C#中的数字文本框?我使用了蒙面文本框,但它不会带小数。
我读过的东西有关重载方法的OnKeyPress所以这将纠正任何错误的字符,但我不知道该怎么办了。
最简单的方法:)
的按键事件在你的文本框
if ((e.KeyChar <= 57 && e.KeyChar >= 48) || e.KeyChar == 13 || e.KeyChar == 8)
{
}
else
{
e.Handled = true;
}
这里如何在vb.net做这个
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim reg As New System.Text.RegularExpressions.Regex("[^0-9_ ]")
TextBox1.Text = reg.Replace(TextBox1.Text, "")
End Sub
只要解决您的特定的正则表达式需要
研究的MaskedTextBox中。
这个问题有点宽泛来解释一切。如果你想要具体细节,试着重点关注这个问题,因为你要求很多社区“解释每个部分”。如果您问几个具体问题(并排除“请抽空解释......”),您会得到更好的答复。
据我所知,没有什么本地在.NET框架(2.0至少)来做到这一点。您的选择是:
我可能会使用一个正则表达式来筛选出非NUMERICS。
伪代码:
for (each item in the input string) {
if (!match(some regular expression, item)) {
toss it out
} else {
add item to text box or whatever you were going to do with it
}
}
如果你仔细观察,在Windows计算器,数字显示在标签中没有一个文本框(它不接收焦点)。该窗口接收键盘事件。
所以看看窗体上的KeyPressed和KeyDown事件。
你可以使用一个简单的文本框或标签的计算器显示屏和公正,确保值(一个字符串?)始终是一个数字。例如,您可以保留一个double,并在想要显示它时将其转换为一个字符串。
作为一个新手,你可能会更适合投资一个优秀的第三方工具包。来自Telerik的Radcontrol例如有一个数字文本框,可以完成你正在寻找的东西。
有一个在框架控制,是专门为数字输入制作:NumericUpDown控件。它也管理十进制值。
添加的事件处理程序要只能是数字文本框,并添加以下代码:
private void textBoxNumbersOnly_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')
{
e.Handled = false;
}
else
{
e.Handled = true;
}
}
这使得数字0到9,也只后退(有用恕我直言)允许通过'。'字符,如果你想支持小数十进制数字输入
if ("1234567890".IndexOf(e.KeyChar.ToString()) > 0)
{
e.Handled = false;
}
else
{
e.Handled = true;
}
有用的,但有一些错误,如果(右击和粘贴)的其他文字。 :D
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
string original = (sender as TextBox).Text;
if (!char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
if (e.KeyChar == '.')
{
if (original.Contains('.'))
e.Handled = true;
else if (!(original.Contains('.')))
e.Handled = false;
}
else if (char.IsDigit(e.KeyChar)||e.KeyChar=='\b')
{
e.Handled = false;
}
}
这是我根据mahasen的答案制作的自定义控件。把它放在它自己的类文件中,并将命名空间修改为任何你想要的。一旦你重建你的解决方案,它应该显示为你的工具箱菜单标签中的一个新控件,你可以拖/放到Form
。
using System;
using System.Linq;
using System.Windows.Forms;
namespace MyApp.GUI
{
public class FilteredTextBox : TextBox
{
// Fields
private char[] m_validCharacters;
private string m_filter;
private event EventHandler m_maxLength;
// Properties
public string Filter
{
get
{
return m_filter;
}
set
{
m_filter = value;
m_validCharacters = value.ToCharArray();
}
}
// Constructor
public FilteredTextBox()
{
m_filter = "";
this.KeyPress += Validate_Char_OnKeyPress;
this.TextChanged += Check_Text_Length_OnTextChanged;
}
// Event Hooks
public event EventHandler TextBoxFull
{
add { m_maxLength += value; }
remove { m_maxLength -= value; }
}
// Methods
void Validate_Char_OnKeyPress(object sender, KeyPressEventArgs e)
{
if (m_validCharacters.Contains(e.KeyChar) || e.KeyChar == '\b')
e.Handled = false;
else
e.Handled = true;
}
void Check_Text_Length_OnTextChanged(object sender, EventArgs e)
{
if (this.TextLength == this.MaxLength)
{
var Handle = m_maxLength;
if (Handle != null)
Handle(this, EventArgs.Empty);
}
}
}
}
,只是作为奖金我也想自动标签到另一个箱子后,我进了3个字符,所以我把盒子的最大长度为3,在Form
代码我迷上那TextBoxFull事件,并集中在它旁边的框。这是将4个过滤的框链接在一起以输入IP地址。前两个箱子形式的代码如下...
private bool ValidateAddressChunk(string p_text)
{
byte AddressChunk = new byte();
return byte.TryParse(p_text, out AddressChunk);
}
private void filteredTextBox1_TextBoxFull(object sender, EventArgs e)
{
var Filtered_Text_Box = (FilteredTextBox)sender;
if (!ValidateAddressChunk(Filtered_Text_Box.Text))
filteredTextBox1.Text = "255";
else
filteredTextBox2.Focus();
}
private void filteredTextBox2_TextBoxFull(object sender, EventArgs e)
{
var Filtered_Text_Box = (FilteredTextBox)sender;
if (!ValidateAddressChunk(Filtered_Text_Box.Text))
filteredTextBox2.Text = "255";
// etc.
}
除了印象,这听起来像一个典型的家庭作业的问题,它也出现利用回答的人(和他/她的时间)是理所当然的。 -1 – Cerebrus 2009-02-03 19:32:58
这是一个足够公平的问题,我想。 +1 – GWLlosa 2009-02-03 19:45:14
尽管我同意提问者应该更加注意,但没有清楚的迹象表明这是一个家庭作业问题。 – EBGreen 2009-02-03 19:59:53