用于周长和大小的 Windows 窗体应用程序 - 我可以进一步改进它吗?



我需要制作一个有 3 个单选按钮的应用程序 - 每个按钮用于选项正方形、矩形和三角形(对应于 radioButtonx,其中 x 是 1,2,3 对于上面的选项)。我还有 5 个标签 - 3 个用于文本"a/b/c=",1 个用于周长,1 个用于图形的面部。我只用"if"尝试了代码,但我得到了一个例外,所以我在我的书中找到了一个带有 try and catch 的代码变体:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void radioButton1_Click(object sender, EventArgs e)
{
textBox1.Visible = true; label1.Visible = true;
textBox2.Visible = false; label2.Visible = false;
textBox3.Visible = false; label3.Visible = false;
}
private void radioButton2_Click(object sender, EventArgs e)
{
textBox1.Visible = true; label1.Visible = true;
textBox2.Visible = true; label2.Visible = true;
textBox3.Visible = false; label3.Visible = false;
}
private void radioButton3_Click(object sender, EventArgs e)
{
textBox1.Visible = true; label1.Visible = true;
textBox2.Visible = true; label2.Visible = true;
textBox3.Visible = true; label3.Visible = true;
}
private void button1_Click(object sender, EventArgs e)
{
double a, b, c, s, P, p;
try
{
a = double.Parse(textBox1.Text);
}
catch (FormatException)
{
a = 0; textBox1.Text = "0";
}
if (textBox2.Visible)
{
try
{
b = double.Parse(textBox2.Text);
}
catch (FormatException)
{
b = 0; textBox2.Text = "0";
}
}
if (textBox3.Visible)
{
try
{
c = double.Parse(textBox3.Text);
}
catch (FormatException)
{
c = 0; textBox3.Text = "0";
}
}
if (radioButton1.Checked)
{
s = a * a;
P = 4 * a;
}
if (radioButton2.Checked)
{
s = 2 * a + 2 * b;
P = a * b;
}
if (radioButton3.Checked)
{
P = (a + b + c);
p = (a + b + c)/2;
s = Math.Sqrt(p * (p - a) * (p - b) * (p - c));
}
label4.Text = "Perimeter=" + P;
label5.Text = "Face=" + s;
}
}

我使用苍鹭公式作为三角形的面(没关系)。

我仍然不完全熟悉如何尝试和捕捉工作,但这不是我要问的。

我有两个问题: 1.我不能只合并单选按钮1.单击和if代码单选按钮的代码.签入如下内容:

if (radioButton1.Checked)
{
try
{
a = double.Parse(textBox1.Text);
}
catch (FormatException)
{
a = 0; textBox1.Text = "0";
}
s = a * a;
P = 4 * a;
}

数字 2:

为什么我的代码在最后两行(对于标签 4 和标签 5)有错误?为什么我似乎不能将它们放在 if 代码的末尾,以便不将其写入每个 if 块中?我该如何纠正它?

你应该阅读关于 TryParse 的信息

所以..如果我正确理解你的代码,你可能不会总是检查radioButton2.Visible,因为radioButton2.Checked你的代码就足够了。您的代码可能如下所示:

double a, b, c;  
double.TryParse(textBox1.Text, out a);
double.TryParse(textBox2.Text, out b);
double.TryParse(textBox3.Text, out c);
if (radioButton1.Checked)
{...}
if (radioButton2.Checked)
{...}
if (radioButton3.Checked)
{...}
//{...} => your code

此方法返回布尔值。如果你想在无法解析时执行 smth,则可以使用它。 喜欢这个:

if(!double.TryParse(textBox1.Text, out a))
{
a = 0; textBox1.Text = "0";
}

这与你的 Quesiton 2 有关。 由于您没有为 s 和 p 分配任何值并用于连接字符串,因此您会收到错误。 要解决此问题,您需要做的是: 双 a, b,c,s,P, p; a = b = c = s = P = p = 0;

相关内容

最新更新