c#方法无法正常工作,原因不明

本文关键字:工作 方法 常工作 | 更新日期: 2023-09-27 18:06:06

我现在正在上编程课,学习c#。我的一项任务是让一个程序在图形用户界面上运行,该界面有一个输入文本框,一个输出文本框,以及一个按钮,用于复制"输入"文本框中的数字并将其粘贴到输出文本框中。由于某种原因,方法computeBtn_Click,即读取输入中的数字并将其放入输出的方法,对我来说完全没有任何作用,但是通过使用方法名称computeBtn_Click_1,它工作得很好。知道为什么吗?

下面是我的代码(没有所有的使用)。系统的东西):<>之前名称空间WindowsFormsApplication1{公共部分类Form1: Form{公共Form1 (){InitializeComponent ();}private void exitToolStripMenuItem_Click(对象发送方,EventArgs e){}//exitToolStripMenuItem1方法//目的:关闭窗口并终止应用程序。//参数:生成事件和事件参数的对象。//返回:没有void exitToolStripMenuItem1_Click(对象发送者,EventArgs e){this.Close ();}//aboutToolStripMenu方法//目的:提供有关应用程序的信息。//参数:生成事件和事件参数的对象。//返回:没有void aboutToolStripMenuItem_Click(对象发送方,EventArgs e){对话框。显示("名字' nCS1400 ' nLab # 4");}私有void inTxtBox_TextChanged(对象发送者,EventArgs e){}private void outTxtBox_TextChanged(对象发送者,EventArgs e){}//由于某些原因,这个方法不能工作。//computeBtn_Click方法//目的:从用户处获取值并再次显示//参数:发送对象和事件参数//返回:none/*private void computeBtn_Click(对象发送者,EventArgs e){int num = int. parse (inTxtBox.Text);string outStr =字符串。格式("{0:D}",num);outTxtBox。Text = outStr;} *///computeBtn_Click_1方法//目的:从用户处获取值并再次显示//参数:发送对象和事件参数//返回:noneprivate void computeBtn_Click_1(对象发送者,EventArgs e){int num = int. parse (inTxtBox.Text);string outStr =字符串。格式("{0:D}",num);outTxtBox。Text = outStr;}}}

c#方法无法正常工作,原因不明

创建事件处理程序时,Visual Studio会自动分配名称。在你的例子中,你有一个名为computeBtn的按钮。然后在图形设计器中为Click事件创建事件处理程序。VS自动为其创建名称:computeBtn_Click .

现在,如果在图形设计器中您决定删除事件处理程序(例如,在按钮的属性选项卡中),则没有任何内容与Click事件挂钩,但名为computeBtn_Click的方法保留在类中。那么,如果您决定为Click事件创建事件处理程序,将会发生什么呢?IDE将创建一个新方法,因为已经有名称为computeBtn_Click的东西,它将修改新方法的名称,因此它仍然是唯一的。在本例中,结果是computeBtn_Click_1

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

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

您的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);
        }