I just figured it out. Now post the source code here and hope anybody help me test it. Want it be perfect.

Thanks a lot.
Code:
int iCaret = 0;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    TextBox txt = (TextBox)sender;

    switch (e.KeyCode)
    {
        case Keys.Left:
            iCaret = ((iCaret - 1) < 0) ? 0 : (iCaret - 1);
            break;
        case Keys.Right:
            iCaret = ((iCaret + 1) > txt.Text.Length) ? txt.Text.Length : (iCaret + 1);
            break;
        case Keys.Home:
            iCaret = 0;
            break;
        case Keys.End:
            iCaret = txt.Text.Length;
            break;
        case Keys.Back:
            iCaret = ((iCaret - 1) < 0) ? 0 : (iCaret - 1);
            break;
        default:
            break;
    }
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    TextBox txt = (TextBox)sender;

    if (e.KeyChar != 8 && iCaret == 0 && txt.Text.Contains("-"))
    {
        e.Handled = true;
        return;
    }
    if (char.IsDigit(e.KeyChar) || e.KeyChar == 8)
        e.Handled = false;
    else
    {
        if (e.KeyChar == '-')
        {
            if (!txt.Text.Contains("-"))
            {
                txt.Text = "-" + txt.Text;
                iCaret++;
                txt.Select(iCaret, 0);
            }
            e.Handled = true;
        }
        else if (e.KeyChar == '.')
        {
            e.Handled = txt.Text.Contains(".");
        }
        else
            e.Handled = true;
    }

    if (!e.Handled && e.KeyChar != 8)
        iCaret++;
}