我创建了一个KeyPress事件处理程序,可以防止在任何子文档输入控件中输入除数字,小数和退格之外的任何内容。问题是处理程序仅可用于创建它的表单。不是将事件处理程序复制到每个表单,有没有办法使其成为全局 - 以便任何表单上的任何输入控件的按键事件都可以订阅它。
谢谢。
答案 0 :(得分:3)
另一个面向对象的解决方案是继承TextBox控件并覆盖KeyPress事件,创建自己的自定义TextBox类型。
class NumericTextBox : System.Windows.Forms.TextBox
{
protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (true /* insert your conditions */)
e.Handled = true;
}
}
然后在需要的地方使用此控件代替常规TextBox控件。
答案 1 :(得分:1)
将其设为公共和静态,您应该将其移至“Utilities”类型类。 (或它自己的班级)
答案 2 :(得分:0)
namespace GlobalKeyPress
{
public class GlobalKeyPress
{
public static void KeyPressFilter(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
if((e.KeyChar < '0' || e.KeyChar > '9') && e.KeyChar != '.')
e.Handled = true;
}
}
}
答案 3 :(得分:0)
委托是普通对象,因此,您可以从方法中返回它们。
具体来说,您需要创建KeyPressEventHandler
代理
public static class Utilities
{
private static KeyPressEventHandler handler = KeyPressed;
public static void KeyPressed(Object sender, KeyPressEventArgs e)
{
// Your logic here
}
public static KeyPressEventHandler getKeyPressHandler() {
return handler;
}
}
注意:我没有测试过这个。根据{{3}}和Using Delegates
上的页面,它看起来是正确的