和Jerry师父一块儿做给石油大学的一个项目,主要是基于组件的开发,说白了,就是把Windows控件进行组合,然后拖到主窗体上进行使用,实现代码的复用。
但是在做装置模块时,我想实现点击树形目录后选择添加自动在新增的窗体上把选择的设备的大类传过去,两天没有弄明白。今天使用断点调试,终于搞定了。
这里我们使用
ZhuangZhiLid.cs作为树形列表显示窗体, SheBeiInfo.cs添加设备窗体,SheBeiInfoCtl.cs作为添加选项的面板组件(添加设备信息的集合)。
1. 要获取要添加的大类的名称,这是在ZhuangZhiLid中点击树形目录后选择“添加”后得到的
ZhuangZhiLid.cs
/// <summary>
/// 添加新设备
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tsmiAddSheBei_Click(object sender, EventArgs e)
{
SheBeiInfo win = new SheBeiInfo(CurrentZhuangZhi.ID);
win.Type = CurrentNode.Text;//设置大类
if (win.ShowDialog(this) == DialogResult.OK)
{
//在当前层的最后一个节点后面追加新节点。
CurrentNode.Nodes.Add(win.NewNode);
}
}
2. 在SheBeiInfo.cs
private string _Type = null;
/// <summary>
/// 类型
/// </summary>
public string Type
{
get
{
return _Type;
}
set
{
this._Type=value;
}
}
注意:这里要将Type属性具有get方法,否则是不能读取的。
3. 在SheBeiInfoCtl.cs中
private string _dalei = null;
/// <summary>
/// 选择的大类
/// </summary>
public string Dalei
{
get
{
return this._dalei;
}
set
{
this._dalei = value;
}
}
public override void Init()
{
base.Init();
//显示大类列表
cbDaLei.DataSource = dataObject.DaLeiList;
//新增
if (this._Action == DataLayer.Object.Operation.Insert)
{
//TODO:根据选择自动填充下拉框的内容
cbDaLei.SelectedItem = Dalei.ToString();
}
……
}
这里添加Dalei的字段和方法主要是为了在
在SheBeiInfo.cs中
private void SheBeiInfo_Load(object sender, EventArgs e)
{
……
sheBeiInfoCtl1.Dalei = this.Type;
sheBeiInfoCtl1.Init();
}
将选择的大类值传递到组件中。
梳理一下整个思路:
我们采用组件开发,在组件中实现获取主窗体的值,步骤为:
(1)在组件中设置相应的字段与属性
(2)主窗体声明组件后,将主窗体的控件的值赋值给组件
(3)以此类推,当给窗体要想获得其他窗体的值,可以采用同样的方式
充分体现了面向对象封装的思想。
后面我会在我的资源中上传一个demo。