C#方法无法正常工作

时间:2014-05-31 08:47:24

标签: c# user-interface

我正在参加编程课程并学习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;
        }
    }
}

3 个答案:

答案 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);
        }