c#方法无法正常工作,原因不明
本文关键字:工作 方法 常工作 | 更新日期: 2023-09-27 18:06:06
我现在正在上编程课,学习c#。我的一项任务是让一个程序在图形用户界面上运行,该界面有一个输入文本框,一个输出文本框,以及一个按钮,用于复制"输入"文本框中的数字并将其粘贴到输出文本框中。由于某种原因,方法computeBtn_Click
,即读取输入中的数字并将其放入输出的方法,对我来说完全没有任何作用,但是通过使用方法名称computeBtn_Click_1
,它工作得很好。知道为什么吗?
创建事件处理程序时,Visual Studio会自动分配名称。在你的例子中,你有一个名为computeBtn
的按钮。然后在图形设计器中为Click事件创建事件处理程序。VS自动为其创建名称:computeBtn_Click
.
现在,如果在图形设计器中您决定删除事件处理程序(例如,在按钮的属性选项卡中),则没有任何内容与Click事件挂钩,但名为computeBtn_Click
的方法保留在类中。那么,如果您决定为Click事件创建事件处理程序,将会发生什么呢?IDE将创建一个新方法,因为已经有名称为computeBtn_Click
的东西,它将修改新方法的名称,因此它仍然是唯一的。在本例中,结果是computeBtn_Click_1
。
要确认这一点,您可以检查不起作用的方法的引用。它将显示代码中没有对该方法的引用。要检查引用,请单击方法名称并按Ctrl+K, R或使用上下文菜单。
其他两个答案都很好,但我想我可能会添加另一个简单的方法来避免这种情况。当你在设计器中选择按钮时,转到属性窗口,你会发现一个名为"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);
}