订阅事件(+=)的代码在什么地方呢?
平时在winform设计的时候订阅时间,比如订阅按钮单击的事件处理程序(是个方法吧),都是直接在设计器里双击按钮控件,
直接定位到事件处理程序的位置(也就是方法的位置),然后就写处理程序的代码,
今天看到书上说,订阅的代码都是手动编写,写在了构造函数如下:
public MainForm()
{
InitializeComponent();
//这个位置写上了订阅事件的代码.......+=..........
}
那么自动定位事件处理程序并订阅事件的时候,其订阅代码是放在什么地方了呢?我找了下没找到,请指点,
另外:一些用于初始化控件的代码写在构造函数里跟写在窗体载入的方法代码块中有区别吗,如下
private void MainForm_Load(object sender, EventArgs e)
{
LoginForm login = new LoginForm();
login.ShowDialog();
if (LoginForm.result == DialogResult.OK)
{
this.tsbRoomType.Enabled = true;
this.tsbRoomSet.Enabled = true;
this.tsbBusiness.Enabled = true;
this.tsbUserManager.Enabled = true;
this.tsmiBaseSetting.Enabled=true;
this.tsmiManageBusiness.Enabled=true;
this.tsmiUserManage.Enabled = true;
}
类似这些设定控件是否可用的代码如下:(或者事件订阅代码等)
this.tsbBusiness.Enabled = true;
this.tsbUserManager.Enabled = true;
this.tsmiBaseSetting.Enabled=true;
this.tsmiManageBusiness.Enabled=true;
this.tsmiUserManage.Enabled = true;
写在构造函数中可以吗?构造函数应该是实例话对象时候调用的,既然创建了这个窗体的对象了,(在xxxx.Design.cs中实例化的对吧?)那么我想,写在构造函数中跟写在窗体载入方法的代码块中效果一样的吧?请指点了....
[解决办法]
可能你看的是“古老”的从前,那些作者写的专门针对vs2003的书。或者,是一些不负责任的作者最近几年写,但是是抄袭已经过时的文章的书。
vs随着进化版本,也把许多一成不变的完全可以傻瓜化的东西隐藏起来。以前,由于你从设计视图上设置事件时vs总是自动在源代码视图上产生可见的代码,那么当你修改代码视图时不小心动了代码,然后当你再次调整事件时vs就会出现莫名其妙的故障——因为它不敢轻易删除你手动修改过的注册代码于是也就无法自动确保维护设计视图和代码视图的完整一致。
新的vs版本,将这种设计视图与代码视图自动关联的东西并不显示在从代码视图中,运行时反射再从设计视图的声明中自动产生注册代码,这就简单干净地保证了逻辑一致性。