C# 单击按钮时标签中未显示的文本

C# 单击按钮时标签中未显示的文本,c#,visual-studio-2010,C#,Visual Studio 2010,我在做一个项目时遇到了麻烦,这个项目涉及到点击一个按钮,文本应该显示在我创建的标签框中。我知道当我点击按钮时,使用文本框来显示文本会更容易,但我的导师希望我们使用标签来显示文本。我已经调试了这个项目,一切都表明它很好,但是当我点击底部的一个按钮时,文本不会显示在指定的标签中。下面是我正在使用的代码。也许我错过了什么。例如,当我单击“客户关系”按钮时,它应该在一个标签中显示部门,在下一个标签中显示联系人姓名,在下一个标签中显示电话号码。我希望这是足够的信息 private void btnCust

我在做一个项目时遇到了麻烦,这个项目涉及到点击一个按钮,文本应该显示在我创建的标签框中。我知道当我点击按钮时,使用文本框来显示文本会更容易,但我的导师希望我们使用标签来显示文本。我已经调试了这个项目,一切都表明它很好,但是当我点击底部的一个按钮时,文本不会显示在指定的标签中。下面是我正在使用的代码。也许我错过了什么。例如,当我单击“客户关系”按钮时,它应该在一个标签中显示部门,在下一个标签中显示联系人姓名,在下一个标签中显示电话号码。我希望这是足够的信息

private void btnCustomerRelations_Click(object sender, EventArgs e)
{
    lblDepartment.Text = "Customer Relations";
    lblContact.Text = "Tricia Smith";    
    lblPhone.Text = "500-1111";
}

private void btnMarketing_Click(object sender, EventArgs e)
{
    lblDepartment.Text = "Marketing";    
    lblContact.Text = "Michelle Tyler";    
    lblPhone.Text = "500-2222";    
}

private void btnOrderProcessing_Click(object sender, EventArgs e)    
{    
    lblDepartment.Text = "Order Processing";    
    lblContact.Text = "Kenna Ross";    
    lblPhone.Text = "500-3333";   
}

private void btnShipping_Click(object sender, EventArgs e)    
{    
    lblDepartment.Text = "Shipping";    
    lblContact.Text = "Eric Johnson";    
    lblPhone.Text = "500-4444";    
}

您是否尝试过在每个方法的末尾插入
Application.DoEvents()
语句?有时候表单对更新标签很挑剔,这种方法会迫使表单重新绘制自己。

项目编译时没有任何错误吗?

默认情况下,C#中的每个事件处理程序都声明为void,这在您的代码中找不到。您是否修改了Visual Studio生成的事件处理程序,如果是这种情况,那么您面临的问题就是因为这个

让我解释一下会出什么问题

每当您使用Visual Studio的“属性”窗口为任何控件创建事件处理程序时,为了便于解释,让我以TextBox为例。假设您有一个TextBox(命名为textBox1,这是默认值),并且您订阅了它的
TextChanged事件
(要执行此操作,请在Visual Studio的“事件”窗口中找到TextChanged事件并双击它,当您执行此操作时,Visual Studio会为您生成此事件

private void textBox1_TextChanged(object sender,EventArgs e)
{

}
这就是我们程序员所称的
事件处理程序
,现在在Visual Studio中找到
解决方案资源管理器窗口
单击
Form1.Designer.cs
您将在那里获得大量代码,找到下面的行

private System.Windows.Forms.TextBox textBox1;

其中textBox1是控件的名称。找到该点上方的加号,单击它并找到以下代码

// 
// textBox1
// 
this.textBox1.AcceptsReturn = true;
this.textBox1.Location = new System.Drawing.Point(478, 0);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(359, 23);
this.textBox1.TabIndex = 1;
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
PS:您的位置、AcceptsReturn、大小和TabIndex属性可能与我的不同。

读这段代码的最后一行,它说

this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
其中
textBox1\u TextChanged是事件的名称,必须与Form1.cs中定义的名称相同。
如果修改此名称,将出现各种编译时错误

现在我想你知道
Form1.cs
(主代码文件)和
Form1.Designer.cs
(代码隐藏文件)之间的关系了

一句话的结论是,确保

Form1.cs中的任何事件处理程序函数
都以private void….开头,private void后面的单词与该特定控件的代码隐藏文件中定义的单词完全相同。如果您想了解更多有关此内容,请查看


希望它能帮助您解决这个问题。还有什么需要通知我的吗。

不知道是否只是粘贴的方式,但任何方法名称(或参数)中都没有空格重建您的项目,并按断点调试按钮单击事件,必须很容易找到问题,可能会在按钮事件和标签事件中混淆在这种情况下没有理由使用DoEvents。我更希望看到OP use Invalidate()或Refresh()很公平。正如他所提到的,使用文本框会更容易,但他必须使用标签。我唯一一次使用标签时,我遇到了问题,并将其作为帮助修复代码的指导原则。我想我至少会尝试将我有限的知识传授给他。我这样评论的唯一原因是,这种方法可以引导你陷入困境,我过去使用过,但遇到了死锁问题。我认为最好不要养成使用它的习惯,因为它会跳起来咬你。同样公平。我感谢你的评论并感谢你的建议!非常感谢,如果我将来需要它,我一定会记住它!再次感谢:)实际上,发布的代码中明显缺少空格。例如,
privatevoidbtnMarketing\u Click(objectsender,EventArgse)
应该是
private voidbtnmarketing\u Click(objectsender,EventArgs e)
你可能是对的,但是OP在编译他们发布的内容时应该会遇到问题。@MarkHall,我想他们忘了提到编译错误,或者可能是什么原因?我不知道他们已经沉默了。他们实际上需要一步一步地检查程序,看看发生了什么。我们现在能想到的一切都是纯粹的猜测构造