2011-09-21 94 views
0

我对文本框有输入约束,它只接受int,直到它可以被Int64解析。问题是清除,因为他是分配给String.Empty,但如果它不能被Int64解析,那么我想抑制该按键。我尝试向keydown事件添加代码,但它也会抑制Int键。TextBox输入约束问题

public static void SetInt64Input(Control tb) 
    { 
     tb.KeyDown += (sender, e) => { 
     if (!IsIntKeyOrAlwaysAcceptableKey(e)) 
     //if not int key suppress it; Ex: A,B,.etc 
      e.SuppressKeyPress = true; 
     }; 
     tb.TextChanged += (s, e) => ClearAllNonInt64Inputs(tb); 

    } 

    private static void ClearAllNonInt64Inputs(Control tb) 
    { 
     long i; 
     if (!Int64.TryParse(tb.Text, out i)) 
      tb.Text = String.Empty; 
     else 
      tb.Text = Int64.Parse(tb.Text).ToString(); 
    } 

我试着做

if(!Int64.TryParse(((TextBox)sender).Text,out junk) 
    e.SuppressKeyPress = true; 

但它力的工作。

+1

您可以将文本框的当前文本存储到一个临时变量,然后在ClearAllNonInt64Inputs()方法后,如果它不是有效的Int64值,请将文本框文本重置为上述临时变量。 – Thinhbk

回答

0

我不知道什么是问题。 但是,如果由于Int64长度超过4个字节而导致输入不可解析,那么我认为限制文本框中字符的数量可能会有所帮助。如果由于非整数值而无法解析,则在按键事件中使用IsNotDigit函数将会有帮助。