進出口新的節目,我不很懂,但我正在做一個計算器,我想用一個文本框,只有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