C#方法因未知原因无法运行

C#方法因未知原因无法运行,c#,user-interface,C#,User Interface,我目前正在上编程课,学习C#。我的一项任务是让一个程序运行在一个图形用户界面上,该界面有一个用于输入的文本框,一个用于输出的文本框,以及一个复制“输入”文本框中的任何数字并将其粘贴到输出文本框中的按钮。出于某种原因,computeBtn\u Click方法,即读取输入中的数字并将其放入输出中的方法,对我来说完全没有任何作用,但通过使用方法名称computeBtn\u Click\u 1,效果非常好。知道为什么吗 这是我的代码(没有使用所有的.System文件): 命名空间Windows窗体应用程

我目前正在上编程课,学习C#。我的一项任务是让一个程序运行在一个图形用户界面上,该界面有一个用于输入的文本框,一个用于输出的文本框,以及一个复制“输入”文本框中的任何数字并将其粘贴到输出文本框中的按钮。出于某种原因,
computeBtn\u Click
方法,即读取输入中的数字并将其放入输出中的方法,对我来说完全没有任何作用,但通过使用方法名称
computeBtn\u Click\u 1
,效果非常好。知道为什么吗

这是我的代码(没有使用所有的.System文件):

命名空间Windows窗体应用程序1 { 公共部分类Form1:Form { 公共表格1() { 初始化组件(); } private void exitToolStripMenuItem\u单击(对象发送者,事件参数e) { } //exitToolStripMenuItem1方法 //用途:关闭窗口并终止应用程序。 //参数:生成事件的对象和事件参数。 //退货:无 void exitToolStripMenuItem1\u单击(对象发送者,事件参数e) { 这个。关闭(); } //关于ToolStripMenu方法 //目的:提供有关申请的信息。 //参数:生成事件的对象和事件参数。 //退货:无 void About ToolStripMenuItem\u单击(对象发送者,事件参数e) { MessageBox.Show(“Name\nCS1400\nLab#4”); } 私有void inTxtBox_TextChanged(对象发送方,事件参数e) { } 私有void outTxtBox_TextChanged(对象发送方,事件参数e) { } //由于某种原因,这种方法不起作用。 //计算机点击法 //目的:从用户处获取值并再次显示 //参数:发送对象和事件参数 //退货:无 /*私有void计算单击(对象发送方,事件参数e) { int num=int.Parse(inTxtBox.Text); stringoutsr=string.Format(“{0:D}”,num); Text=outtr; }*/ //计算机单击1方法 //目的:从用户处获取值并再次显示 //参数:发送对象和事件参数 //退货:无 私有无效计算单击1(对象发送方,事件参数e) { int num=int.Parse(inTxtBox.Text); stringoutsr=string.Format(“{0:D}”,num); Text=outtr; } }
} 您的
EventHandler
委托未在分部类中设置为调用
computeBtn\u单击

我所说的分部类是指
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);
        }

创建事件处理程序时,VisualStudio会自动指定名称。因此,在您的示例中,有一个名为
computeBtn
的按钮。然后在图形设计器中为单击事件创建事件处理程序。VS自动为其创建名称:
computeBtn\u单击

现在,如果在图形设计器中您决定删除事件处理程序(例如,在按钮的“属性”选项卡中),则没有任何内容连接到Click事件,但名为
computeBtn\u Click
的方法仍保留在类中。那么,如果您决定为Click事件创建一个事件处理程序,会发生什么呢?IDE将创建一个新方法,因为已经有了名为computeBtn_Click的东西,它将修改新方法的名称,所以它仍然是唯一的。在这种情况下,会导致
计算单击1


要确认这一点,可以检查不起作用的方法的引用。它将显示代码中没有对该方法的引用。要查看引用,请单击该方法的名称并按Ctrl+K、R或使用上下文菜单。

其他两个答案都很好,但我想我可能会添加另一种简单的方法来避免这种情况。当您在设计器中选择按钮时,转到“属性”窗口,您将在那里找到一个名为“事件”的选项卡。在“单击”下,您可以选择要用于按钮单击事件的方法。

我打赌您以前有一个名称相同的按钮,该按钮曾一度被删除。当您添加另一个同名按钮时,它会创建一个带有索引/下标的新名称。感谢您自动生成的代码。computeBtn Click事件是否连接到该控件(查看控件属性窗口的事件选项卡),您正在随机添加事件处理程序。小心双击。了解如何使用属性窗口,点击闪电图标查看事件处理程序。明白了。在检查事件中的Click属性后,它被设置为computeBtn\u Click\u 1。另外,这是我不久前做的一个赋值,此后我停止为表单中的所有内容添加事件处理程序。当时,我认为我也必须为文本框这样做,因为我得到了一个错误,我认为这与某种原因有关。谢谢。在检查事件中的Click属性后,它被设置为computeBtn\u Click\u 1。谢谢
  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 this.button1.Click += new System.EventHandler(computeBtn_Click);
        }