我正在参加编程课程并学习C#。我的任务之一是使用图形用户界面运行程序,该界面具有用于输入的文本框,用于输出的文本框,以及用于复制“输入”文本框中的任何数字并将其粘贴到输出中的按钮文本框。由于某种原因,方法computeBtn_Click
,这是读取输入中的数字并将其放在输出中的方法,对我来说绝对没有任何作用,但是通过使用方法名称computeBtn_Click_1
它工作得很好。知道为什么吗?
这是我的代码(没有所有的using.System东西):
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { } //exitToolStripMenuItem1 method //Purpose: To close the window and terminate the application. //Parameters: The object generating the event and the event arguments. //Returns: None void exitToolStripMenuItem1_Click(object sender, EventArgs e) { this.Close(); } //aboutToolStripMenu method //Purpose: To give information about the application. //Parameters: The object generating the event and the event arguments. //Returns: None void aboutToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("Name\nCS1400\nLab #4"); } private void inTxtBox_TextChanged(object sender, EventArgs e) { } private void outTxtBox_TextChanged(object sender, EventArgs e) { } // For some reason this method wasn't working. // computeBtn_Click Method // Purpose: Get a value from the user and display it back again // Parameters: The sending object, and the event arguments // Returns: none /*private void computeBtn_Click(object sender, EventArgs e) { int num = int.Parse(inTxtBox.Text); string outStr = string.Format("{0:D}", num); outTxtBox.Text = outStr; }*/ // computeBtn_Click_1 Method // Purpose: Get a value from the user and display it back again // Parameters: The sending object, and the event arguments // Returns: none private void computeBtn_Click_1(object sender, EventArgs e) { int num = int.Parse(inTxtBox.Text); string outStr = string.Format("{0:D}", num); outTxtBox.Text = outStr; } } }
答案 0 :(得分:3)
创建事件处理程序时,Visual Studio会自动分配名称。因此,在您的情况下,您有一个名为computeBtn
的按钮。然后在图形设计器中为Click事件创建一个事件处理程序。 VS会自动为其创建名称:computeBtn_Click
。
现在,如果在图形设计器中您决定删除事件处理程序(例如,在按钮的“属性”选项卡中),则不会将任何内容挂钩到Click事件,但名为computeBtn_Click
的方法仍保留在类中。那么,如果您决定为Click事件创建事件处理程序,会发生什么? IDE将创建一个新方法,因为已经有一个名为computeBtn_Click
的东西,它将修改新方法的名称,因此它仍然是唯一的。在这种情况下会导致computeBtn_Click_1
。
要确认这一点,您可以检查不起作用的方法的参考。它将显示该方法的代码中没有引用。要检查引用,请单击方法的名称,然后按 Ctrl + K , R 或使用上下文菜单。
答案 1 :(得分:2)
另外两个答案很棒,但我想我可能会添加另一个简单的方法来避免这种情况。当您在设计器中选择按钮时,转到属性窗口,在那里您将找到一个名为“Events”的选项卡。在“单击”下,您可以选择要用于按钮单击事件的方法。
答案 2 :(得分:1)
您的EventHandler
代表未在您的部分课程中设置为computeBtn_Click
通过部分类我的意思是Form1.Designer.cs
,它可能看起来像这样
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(105, 30);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(170, 74);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.computeBtn_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 261);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
尝试此操作,单击按钮
时将调用您的方法 public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.button1.Click += new System.EventHandler(computeBtn_Click);
}