private void numWeight_KeyPress(object sender, KeyPressEventArgs e) { if (char.IsNumber(e.KeyChar) || e.KeyChar == '.' || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Delete) { e.Handled = false; //让操作生效 int j = 0; //记录小数点个数 int k = 0; //记录小数位数 int dotloc = -1; //记录小数点位置 bool flag = false; //如果有小数点就让flag值为true for (int i = 0; i < numWeight.Text.Length; i++) { if (numWeight.Text[i] == '.') { j++; flag = true; dotloc = i; } if (flag) { if (char.IsNumber(numWeight.Text[i]) && e.KeyChar != (char)Keys.Back && e.KeyChar != (char)Keys.Delete) { k++; } } if (j >= 1) { if (e.KeyChar == '.') { if (numWeight.SelectedText.IndexOf('.') == -1) e.Handled = true;//输入“.”,选取部分没有“.”操作失效 } } if (!flag) //此处控制没有小数点时添加小数点是否满足两位小数的情况 { if (e.KeyChar == '.') { if (numWeight.Text.Length - numWeight.SelectionStart - numWeight.SelectedText.Length > 2) //the condition also can be instead of "textBox1.Text.Substring(textBox1.SelectionStart).Length-textBox1.SelectionLength>2" e.Handled = true; } } if (k == 2) { if (numWeight.SelectionStart > numWeight.Text.IndexOf('.') && numWeight.SelectedText.Length == 0 && e.KeyChar != (char)Keys.Delete && e.KeyChar != (char)Keys.Back) //如果已经有两位小数,光标在小数点右边, e.Handled = true; } } } else { e.Handled = true; } }