【发布时间】:2020-07-17 14:50:56
【问题描述】:
我正在玩一个基本的计算器窗口应用程序,并试图在按下回车键时让它计算方程。目前,如果我给它 2+2 并单击我的相等按钮,它应该注册 4。当我按下键盘上的回车键时,我希望得到相同的响应。我正在尝试使用此代码执行此操作:
if (e.KeyCode == Keys.Enter)
{
equal.PerformClick();
}
结果为 2+22(最后输入的数字重复) 但是,如果我使用字母或 F 键(如下代码所示),它会返回正确答案:
if (e.KeyCode == Keys.C)
{
equal.PerformClick();
}
以下是“equal.PerformClick()”调用的代码供参考
decimal numA;
decimal numB;
decimal result = 0;
//-------------------------------------------------------------
decimal.TryParse(this.first_num_label.Text, out numA);
decimal.TryParse(this.label1.Text, out numB);
if (this.operator_name.Text == "+")
{
result = numA + numB;
}
//---------------------------------------------------------------
if (this.operator_name.Text == "-")
{
result = numA - numB;
}
//---------------------------------------------------------------
if (this.operator_name.Text == "x")
{
result = numA * numB;
}
//---------------------------------------------------------------
if (this.operator_name.Text == "/")
{
result = numA / numB;
}
//---------------------------------------------------------------
this.label1.Text = result.ToString();
this.first_num_label.Text = "";
this.operator_name.Text = "";
这里是完整的代码:。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Calc_project
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void clear_Click(object sender, EventArgs e)
{
//this.label1.Text = "";
this.label1.ResetText();
}
private void one_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "1";
}
private void two_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "2";
}
private void three_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "3";
}
private void four_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "4";
}
private void five_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "5";
}
private void six_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "6";
}
private void seven_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "7";
}
private void eight_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "8";
}
private void nine_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "9";
}
private void zero_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + "0";
}
private void plus_Click(object sender, EventArgs e)
{
this.operator_name.Text = "+";
if (this.label1.Text != "")
{
this.first_num_label.Text = this.label1.Text;
}
this.label1.ResetText();
}
private void minus_Click(object sender, EventArgs e)
{
this.operator_name.Text = "-";
if (this.label1.Text != "")
{
this.first_num_label.Text = this.label1.Text;
}
this.label1.ResetText();
}
private void multiply_Click(object sender, EventArgs e)
{
this.operator_name.Text = "x";
if (this.label1.Text != "")
{
this.first_num_label.Text = this.label1.Text;
}
this.label1.ResetText();
}
private void div_Click(object sender, EventArgs e)
{
this.operator_name.Text = "/";
if (this.label1.Text != "")
{
this.first_num_label.Text = this.label1.Text;
}
this.label1.ResetText();
}
private void equal_Click(object sender, EventArgs e)
{
decimal numA;
decimal numB;
decimal result = 0;
//-------------------------------------------------------------
decimal.TryParse(this.first_num_label.Text, out numA);
decimal.TryParse(this.label1.Text, out numB);
if (this.operator_name.Text == "+")
{
result = numA + numB;
}
//---------------------------------------------------------------
if (this.operator_name.Text == "-")
{
result = numA - numB;
}
//---------------------------------------------------------------
if (this.operator_name.Text == "x")
{
result = numA * numB;
}
//---------------------------------------------------------------
if (this.operator_name.Text == "/")
{
result = numA / numB;
}
//---------------------------------------------------------------
this.label1.Text = result.ToString();
this.first_num_label.Text = "";
this.operator_name.Text = "";
}
private void button1_Click(object sender, EventArgs e)
{
this.label1.ResetText();
this.first_num_label.ResetText();
this.operator_name.ResetText();
}
private void Decimal_Click(object sender, EventArgs e)
{
this.label1.Text = this.label1.Text + ".";
}
private void button2_Click(object sender, EventArgs e)
{
decimal len;
decimal wit;
decimal area;
decimal.TryParse(this.textBox1.Text, out len);
decimal.TryParse(this.textBox2.Text, out wit);
area = len * wit;
if (ft.Checked == true)
{
this.label2.Text = area.ToString() +" square feet";
}
if (meters.Checked == true)
{
this.label2.Text = area.ToString() +" square meters";
}
if (cm.Checked == true)
{
this.label2.Text = area.ToString() + " square centimeters";
}
if (yards.Checked == true)
{
this.label2.Text = area.ToString() + " square yards";
}
//else
//{
// this.label2.Text = area.ToString();
//}
}
private void button3_Click(object sender, EventArgs e)
{
this.textBox1.Text = "";
this.textBox2.Text = "";
this.label2.ResetText();
}
private void button4_Click(object sender, EventArgs e)
{
decimal ar;
decimal cov;
decimal req;
//--------------------------------------------
decimal.TryParse(this.textBox4.Text, out ar);
decimal.TryParse(this.textBox3.Text, out cov);
//--------------------------------------------
req = ar / cov;
this.requirement.Text = req.ToString() + " Gallons";
}
private void button5_Click(object sender, EventArgs e)
{
decimal Slabar;
decimal Slabtk;
decimal TKft;
decimal cubFt;
decimal ConYard;
//--------------------------------------------
decimal.TryParse(this.textBox5.Text, out Slabar);
decimal.TryParse(this.textBox6.Text, out Slabtk);
//--------------------------------------------
TKft = Slabtk / 12;
cubFt = Slabar * TKft;
ConYard = cubFt / 27;
//--------------------------------------------
this.label10.Text = ConYard.ToString();
}
private void tabControl1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
equal.PerformClick();
}
if (e.KeyCode == Keys.F1) //this code works
{
MessageBox.Show("test");
}
if (e.KeyCode == Keys.Escape) //so does this
{
this.Close();
}
if (e.KeyCode == Keys.NumPad9) // also works
{
this.label1.Text = this.label1.Text + "9";
}
if (e.KeyCode == Keys.F2)
{
equal.PerformClick();
}
}
}
}
【问题讨论】:
-
"但是,它不能使用 enter 键,只能使用 enter 键。"嗯?
-
这里缺少很多信息,尤其是其中什么技术。请添加相关标签并向我们展示minimal reproducible example
-
我选择的任何其他键(字母、F 键)都可以正常工作,只是不输入。
-
您的问题确实不清楚,但首先,根据文档 (docs.microsoft.com/en-us/dotnet/api/…),
Keys.Enter和Keys.Return是完全一样的,所以您实际尝试的是哪两个键使用? -
问题不是你对 C# 的陌生,而是你的问题,尤其是这句话,没有任何意义:“按 Enter 时完成方程式,就像单击 Enter 按钮时一样。但是,它不适用于回车键,只能使用回车键。” - 请澄清您的问题。
标签: c# windows visual-studio