从父级到对话框的数据
本文关键字:数据 对话框 | 更新日期: 2023-09-27 18:36:08
我有一个父窗体和一个对话框。 我需要将信息从父级传递到对话框
这是我所拥有的:
private void Item_Click(object sender, EventArgs e)
{
DialogResult result = DialogResult.OK;
DlgGraphOptions _frmDlgGraphOptions = new DlgGraphOptions();
_frmDlgGraphOptions.m_SerOpts = theDGroup.m_SerOpts;
_frmDlgGraphOptions.ShowDialog(this);
if (result == DialogResult.OK)
{
// Save the revised options to the Data Group
theDGroup.m_SerOpts = _frmDlgGraphOptions.m_SerOpts;
}
在DlgGraphOptions(child/dialog)表单中,我已初始化
public partial class DlgGraphOptions : Form
{
public GraphOpts_t m_SerOpts = new GraphOpts_t();
}
private void InitSettings(int idxSeries)
{
m_nMaxPts = m_SerOpts.GetMaxPts(idxSeries);
}
所以我需要将theDGroup.m_SerOpts从父级传递到对话框,所以我已经完成了
_frmDlgGraphOptions.m_SerOpts = theDGroup.m_SerOpts;
在父级中。 现在在孩子身上:
public GraphOpts_t m_SerOpts = new GraphOpts_t;
这似乎是错误的。我不想重新初始化它。
我认为你应该这样改变你的代码:
首先,在 DlgGraphOptions 窗体中,更改 DlgGraphOptions 的构造函数
// Force the caller to pass a GraphOpts_t
// Check if it is a valid instance or create one as new
public partial class DlgGraphOptions(GraphOpts_t input ) : Form
{
m_SerOpts = (input == null ? new GraphOpts_t() : input);
}
然后创建一个公共属性,只有getter返回内部GraphOpts
public GraphOpts_t Options
{
get{ return m_SerOpts; }
}
然后,在调用窗体中,更改 uour 代码
// Pass the m_setOpts from theDGroup
DlgGraphOptions _frmDlgGraphOptions = new DlgGraphOptions(theDGroup.m_SerOpts);
if(DialogResult.OK == _frmDlgGraphOptions.ShowDialog(this))
{
// Save the revised (or new) options to theDGroup
theDGroup.m_SerOpts = _frmDlgGraphOptions.Options;
}
此方法将强制对话框的用户传递初始化值或 null。但是,您的 InitSettings 将使用初始化的值,并且您没有初始化两次选项实例。
(实际上你的代码没有太大的改进,但我认为这是一种更好的方法)
你的子类可能应该将m_SerOpts
作为一个属性:
public partial class DlgGraphOptions : Form
{
public GraphOpts_t m_SerOpts { get; set; }
}
您的点击事件可能可以像这样清理:
private void Item_Click(object sender, EventArgs e)
{
using (DlgGraphOptions _frmDlgGraphOptions = new DlgGraphOptions()) {
_frmDlgGraphOptions.m_SerOpts = theDGroup.m_SerOpts;
if (_frmDlgGraphOptions.ShowDialog(this) == DialogResult.OK)
{
// Save the revised options to the Data Group
theDGroup.m_SerOpts = _frmDlgGraphOptions.m_SerOpts;
}
}
}
在 DlgGraphOptions 窗体中,需要在"OK
"或"Save
"按钮事件中设置窗体的 DialogResult
属性。
您也可以通过构造函数传递m_SerOpts对象:
public partial class DlgGraphOptions : Form
{
public GraphOpts_t m_SerOpts { get; }
public DlgGraphOptions(GraphOpts_t serOpts) {
InitializeComponents();
m_SerOpts = serOpts;
}
}