テキストボックスkeypress
イベントを使用して、選択した入力のみを処理しています。基本的に、textbox
を使用すると、ユーザーは計算可能な値を入力できます。
つまり、_(5*5)- (10/5)
_と入力できます。
Convert.ToChar("*")==e.KeyChar
などの現在のメソッドチェック...
現時点では、ユーザーが貼り付け値をコピーすることはできません。
とにかくkeypress
イベントで_ctrl+v
_を検出できるものはありますか?
更新
私が今していること
_ static IEnumerable<char> ValidFiancialCharacters
{
get
{
if(_validFiancialCharacters==null)
{
_validFiancialCharacters = new List<char>();
_validFiancialCharacters.Add(Convert.ToChar("0"));
_validFiancialCharacters.Add(Convert.ToChar("1"));
_validFiancialCharacters.Add(Convert.ToChar("2"));
// till 9 and
_validFiancialCharacters.Add(Convert.ToChar("+"));
_validFiancialCharacters.Add(Convert.ToChar("-"));
_validFiancialCharacters.Add(Convert.ToChar("/"));
//and some other
}
return _validFiancialCharacters;
}
}
public static bool ValidateInput(KeyPressEventArgs e)
{
if (ValidFiancialCharacters.Any(chr => chr == e.KeyChar))
{
e.Handled = false;
}
else
{
e.Handled = true;
}
return e.Handled;
}
_
そしてキープレスで
_ private void txtRate_KeyPress(object sender, KeyPressEventArgs e)
{
NumberExtension.ValidateInput(e);
}
_
両方を処理する必要がある場合は、同様のアプローチを使用して実行できます
キーコード をご覧ください。キーが押されたことを検出できます
そう..
必要なすべての入力を含むリストを作成します
public List<int> KeyCodes = new List<int>() { 8, 17, 37, 39.....etc};
KeyDown
イベントを使用し、 KeyEventArgs.SuppressKeyPress プロパティを使用します
private void Txt1_KeyDown(object sender, KeyEventArgs e)
{
if (KeyCodes.Contains(e.KeyValue) || (e.KeyCode==Keys.V && e.Control))
e.SuppressKeyPress = false;
else
e.SuppressKeyPress=true;
}
ユーザーは何でも貼り付けることができるため、leave event
にコピーして貼り付けた値を検証する必要がある場合があります!!!
KeyPress
イベントが何らかの理由で「Ctrl + V」をキャッチしません。 KeyDown
イベントを使用します:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.V)
{
//Ctrl + V
}
}
または
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Control | Keys.V))
{
//Ctrl + V
}
}
Ctrl + Vシーケンスは、KeyPressEventによってキャッチできます。
次の方法では確認できません。
(Keys)e.KeyChar == Keys.V && Control.ModifierKeys == Keys.Control <br>
使用する必要があります:
(int)e.KeyChar==22 && Control.ModifierKeys == Keys.Control <br>
キーボードがASCII = 22(同期アイドル)を生成するためです。
次の例では、TextBoxがカンマ区切り文字で+-の金額を受け入れることができ、Ctrl + Vで貼り付けることができます。
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (!( char.IsNumber(e.KeyChar) ||
((Keys)e.KeyChar == Keys.Back) ||
(e.KeyChar == ',') ||
(e.KeyChar == '-') ||
((int)e.KeyChar==22 && Control.ModifierKeys == Keys.Control)
))
{
e.Handled = true;
}
if (e.KeyChar == ',' && base.Text.IndexOf(',') > 0)
{
e.Handled = true;
}
base.OnKeyPress(e);
}
KeyPressイベントはCTRLボタンでは発生せず、「文字」ボタンでのみ発生するため、KeyDownまたはKeyUpを使用する必要があります。 KeyDownイベントを使用する場合は、以下をチェックすることでctrl+v
を検出できます。
if (e.Control && e.KeyCode == Keys.V)
{
...
}