ユーザーが 0..9、「.」のみを入力できるようにしたい。私のDGVでバックスペース。次のような KeyDown イベントがチケットである可能性があると思いました。
private void dataGridViewPlatypi_KeyDown(object sender, KeyEventArgs args)
{
args.Handled = !args.KeyCode.Equals(Keys.Decimal); // etc. - add other allowed vals
if (args.Handled)
{
args.SuppressKeyPress = true;
}
}
...しかし、それは機能しません/効果がありません。
私はこれを調査して見つけました: DataGridView keydown event not working in C#
...これにより、これを使用してカスタム DGV クラスを作成することになりました。
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if ((!keyData.Equals(Keys.Decimal)) &&
(!keyData.Equals(Keys.???))) // etc.
{
//suppress the key somehow
}
return base.ProcessCmdKey(msg, keyData); // <-- should this be in an "else" block?
}
...しかし、「???」からわかるように そして「どういうわけか」コメント、許可したい他のキー(0..9とバックスペース)をテストする方法がわかりません
アップデート
2 人の回答者からの有能な支援により、現在はうまく機能しています。
ここでは、移動可能な最終行の問題を解決するカスタム DGV 派生コントロールを作成するために、Hans Passant のコードから始めました。
...そして、LarsTech に基づいたコードを追加して、DGV 内の不要なエントリを除外しました。
正確には、これは ProcessCmdKey() をオーバーライドするために使用した正確なロジックです。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (char.IsNumber(Convert.ToChar(keyData)) ||
char.IsControl(Convert.ToChar(keyData)) ||
(keyData >= Keys.NumPad0 && keyData <= Keys.NumPad9) ||
(keyData == Keys.Space) ||
(keyData == Keys.Back) ||
(keyData == Keys.Decimal))
{
return false;
}
return true;
}