按钮click事件代码:
private void btnCal_Click(object sender, EventArgs e)
{
if (txth.Text.Trim() == "")
{
errorProvider1.SetError(txth, "拱高不能为空!");
txth.Focus();
return;
}
if (txtw.Text.Trim() == "")
{
txtw.Focus();
errorProvider1.SetError(txtw, "弦长不能为空!");
return;
}
double h = Convert.ToDouble(txth.Text);
double w = Convert.ToDouble(txtw.Text);
double r = (Math.Pow(h, 2.0) + Math.Pow(w, 2.0) / 4.0) / (h * 2.0);
double a = 2 * Math.Asin(w / 2 / r); //第一法 注意这是个孤度值,不是微软说的角度值,纠结之处吧!
// double a = Math.Acos(Math.Pow((r - h) / r,2) *2-1); //第二法
double l = a * r;
//以下为那个劣孤/优孤之处理
if (h > r)
{
l = 2 * Math.PI * r - l;
a = 2 * Math.PI - a;
}
lblr.Text = r.ToString();//显示半径
lbla.Text = (a * 180 / Math.PI).ToString();//转为角度显示
lbll.Text = l.ToString();//显示孤长
}
限制文本框输入的代码,相关文本框KeyPress与之相绑定即可
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar >= '0' && e.KeyChar <= '9') || e.KeyChar == '.' || (byte)(e.KeyChar) == 8)
{
}
else
{
e.Handled = true;
}
}
另外可加些处理,比如回车
private void txtw_KeyUp(object sender, KeyEventArgs e)
{
errorProvider1.SetError(txtw, "");
if (e.KeyCode == Keys.Enter) btnCal_Click(null, null);
}
private void txth_KeyUp(object sender, KeyEventArgs e)
{
errorProvider1.SetError(txth, "");
if (e.KeyCode == Keys.Enter) txtw.Focus();
}
第一次显示则聚焦在第一个文本上
private void FormMain_Shown(object sender, EventArgs e)
{
txth.Focus();
}
有图有真相:(注意三种不同的夹角)
厂里正好用上此类小程序的。