我有一个Windows窗体应用程序。我在这个应用程序中有几个表单(主表单和几个专用表单),并且只在一个表单上,单击事件不会触发我的任何按钮。
并不是处理程序中的代码被破坏了。这可以通过单击按钮时从未到达处理程序第一行的断点来确定。
其他事件正在发挥作用(我正在此表单上使用CheckedChanged
个事件并且它们正在运行。)
我的团队成员已经审核过,也无法发现问题。
以下是我的代码的简化视图:
Designer生成的代码
partial class MyForm
{
private System.Windows.Forms.Button addButton;
private void InitalizeComponent()
{
this.addButton = new System.Windows.Forms.Button();
this.addButton.Name = "addButton";
// Drawing statements here
this.addButton.Click += new System.EventHandler(this.addButton_Click);
this.Controls.Add(this.addButton);
}
}
我的代码
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
}
private void addButton_Click(object sender, EventArgs e)
{
MessageBox.Show("The debugger is not reaching a break point on this line");
}
}
修改:测试中的其他信息
我的表单中有几个数据绑定下拉列表。我发现如果我先在下拉框中进行选择,则只能触发click事件。
如果我没有选择,按钮处理程序中的断点将触发。否则它没有。这些下拉列表中没有注册任何事件。
答案 0 :(得分:8)
原因如下:
使用数据绑定时,当您在数据绑定控件中输入值时,它首先尝试验证条目,然后如果条目有效,数据绑定将把值放在数据源中,但是如果验证错误发生验证返回false,你的控件进入无效模式。
当表单的子控件没有验证时,默认情况下您无法从无效控件更改焦点。
默认情况下点击一个按钮会导致失去焦点的控件验证,因此您无法点击按钮,因为您看到按钮反映到鼠标但实际上没有点击。
如果您处理ALTER TABLE `administration`
ADD CONSTRAINT `fk_stud3_id` FOREIGN KEY (`stud_ID`) REFERENCES `student` (`stud_ID`),
ADD CONSTRAINT `fk_faculty3_ID` FOREIGN KEY (`faculty_ID`) REFERENCES `faculty` (`faculty_ID`);
ADD CONSTRAINT `fk_org1_id` FOREIGN KEY (`org_ID`) REFERENCES `organization` (`org_ID`)
ALTER TABLE `student_list`
ADD CONSTRAINT `fk_stud4_id` FOREIGN KEY (`stud_ID`) REFERENCES `student` (`stud_ID`),
ADD CONSTRAINT `fk_admin2_id` FOREIGN KEY (`admin_ID`) REFERENCES `administration` (`admin_ID`);
等控件的Validating
事件并设置TextBox
,则会出现同样的问题。
以下是修复:
您可以使用以下任一选项修复此行为:
e.cancel = true
属性设置为CausesValidation
false
属性设置为AutoValidate
答案 1 :(得分:1)
我在进一步测试后发现了这个问题。
我的问题不在于按钮事件,而是在从下拉框中进行选择后表单被阻止。
我还没有发现为什么选择下拉后的表单块(它没有事件,但确实有数据绑定,所以有一些可能的原因)。
感谢您的帮助!
答案 2 :(得分:0)
这将为您解决问题
更改
public ScheduleMeeting()
{
InitializeComponent();
}
到
public MyForm()
{
InitializeComponent();
}