Previous topicNext topic
Help > 开发指南 > 预备知识 >
如何引用子窗口中的控件

系统自带的动态生成的子窗口中,我们有时候需要对部分动态生成的控件进行部分调整的话,比如修改部分属性、动态添加一些事件处理等等。那么我们该如何引用到这些控件呢?

首先我们先介绍一下如何引用到子窗体。

Vb.Net
'从主表去引用子窗口
Dim tbl As SmGrid=Proj.CurrentSmGrid
Dim subForm As SmForm=tbl.SubForm
If tbl.SubForm Is Nothing Then
    '打开子窗体
    tbl.ShowSubForm(SubFormEditModeEnum.Edit)
    subForm=tbl.SubForm
End If
Proj.MsgDebug.Add(subForm.Text)

'如果子窗口已经打开,则可以直接引用
subForm=Proj.OpenedForms("员工管理_tblMain_EditForm")
Proj.MsgDebug.Add(subForm.Text)

C#
// 从主表去引用子窗口
SmGrid tbl = Proj.CurrentSmGrid;
SmForm subForm = tbl.SubForm;
if (tbl.SubForm == null)
{
    // 打开子窗体
    tbl.ShowSubForm(SubFormEditModeEnum.Edit);
    subForm = tbl.SubForm;
}

Proj.MsgDebug.Add(subForm.Text);

// 如果子窗口已经打开,则可以直接引用
subForm = Proj.OpenedForms["员工管理_tblMain_EditForm"];
Proj.MsgDebug.Add(subForm.Text);

通过窗体引用控件

Vb.Net
Dim tbl As SmGrid = Proj.OpenedForms("员工管理").Grids("tblMain")
Dim subFrm As FormEditSubForm = TryCast(tbl.SubForm, FormEditSubForm)
Dim boxs As BoxControlCollection = subFrm.GridFieldControls.BoxControls
Dim ctrl As ICaptionControl=boxs("FullName")
Proj.MsgDebug.Add("Name:{0}",ctrl.Name)
Proj.MsgDebug.Add("Caption:{0}",ctrl.Caption)
Proj.MsgDebug.Add("CaptionAlign:{0}",ctrl.CaptionAlign.ToString())
Proj.MsgDebug.Add("CaptionWidth:{0}",ctrl.CaptionWidth)
Proj.MsgDebug.Add("CaptionFont:{0}",ctrl.CaptionFont.ToString())
Proj.MsgDebug.Add("CaptionForeColor:{0}",ctrl.CaptionForeColor.ToString())

'获取用来绑定的实际控件
Dim txtFullName As SmDropDownBox=ctrl.BaseControl
Proj.MsgDebug.Add("基础控件名称:{0}",txtFullName.Name)
Proj.MsgDebug.Add("基础控件文本:{0}",txtFullName.Text)
'修改属性
txtFullName.ForeColor=Color.Red
'绑定事件
AddHandler txtFullName.TextChanged, AddressOf fullName_txtChanged
    
'以下代码放到与方法体外部或全局代码中
Private Sub fullName_txtChanged(sender As Object,e As EventArgs)
    Dim txtCtrl As SmTextBox=sender
    MessageBox.Show(txtCtrl.Text)
End Sub

C#
SmGrid tbl = Proj.OpenedForms["员工管理"].Grids["tblMain"] as SmGrid;
FormEditSubForm subFrm = tbl.SubForm as FormEditSubForm;
BoxControlCollection boxs = subFrm.GridFieldControls.BoxControls;
ICaptionControl ctrl = boxs["FullName"] as ICaptionControl;
Proj.MsgDebug.Add("Name:{0}", ctrl.Name);
Proj.MsgDebug.Add("Caption:{0}", ctrl.Caption);
Proj.MsgDebug.Add("CaptionAlign:{0}", ctrl.CaptionAlign.ToString());
Proj.MsgDebug.Add("CaptionWidth:{0}", ctrl.CaptionWidth);
Proj.MsgDebug.Add("CaptionFont:{0}", ctrl.CaptionFont.ToString());
Proj.MsgDebug.Add("CaptionForeColor:{0}", ctrl.CaptionForeColor.ToString());

// 获取用来绑定的实际控件
SmDropDownBox txtFullName = ctrl.BaseControl as SmDropDownBox;
Proj.MsgDebug.Add("基础控件名称:{0}", txtFullName.Name);
Proj.MsgDebug.Add("基础控件文本:{0}", txtFullName.Text);
// 修改属性
txtFullName.ForeColor = Color.Red;
// 绑定事件
txtFullName.TextChanged += fullName_txtChanged;

// 以下代码放到与方法体外部或全局代码中
private void fullName_txtChanged(object sender, EventArgs e)
{
    SmTextBox txtCtrl = sender;
    MessageBox.Show(txtCtrl.Text);
}