将变量从主窗体传递到输入窗体

时间:2009-09-16 14:03:58

标签: winforms forms delegates argument-passing

我有一个简单的问题。我有一个主表单,然后是一个启动表单,我可以从中选择要生成的新3D模型。从启动表单中选择新的3D模型时,我想首先检查我之前使用的模型是否已保存。我只是想使用委托将一个布尔值从主窗体传递给启动窗体,但我似乎无法访问主窗体或其任何变量。我认为这就像说:< code> frmMain myForm = new frmMain();< / code>,但输入frmMain并不会在intellisense中显示任何内容。

任何提示?

3 个答案:

答案 0 :(得分:3)

在主表单上添加公共属性

public bool IsDirty
{
    get;set;
}

然后,您可以在启动表单中访问this.ParentForm.IsDirty

请记住在显示启动表单时传递对主表单的引用... startupForm.showDialog(this);

答案 1 :(得分:0)

启动表单无法访问您的主表单。您必须将其存储在您想要使用它的位置。

您也可以通过以下方式(以及其他方式)来实现:

// This class is mainly used to transfer values in between different components of the system
    public class CCurrent
    {

        public static Boolean Saved = false;


    }

确保将此类放在名称空间中,这两个表单都可以访问。

现在在你的frmMain表单中设置CCurrent.Saved的值并在启动表单中访问它。

答案 2 :(得分:0)

这是我的建议: 在主窗体中放置一个3DModel对象属性:

private Model _model;

将您的启动表单声明为Dialog(如OpenFileDialog)并执行以下操作:

public void OpenModel()
{
using(var frm=new StartUpForm())
{
if(frm.ShowDialog()==DialogResult.OK))
{
if(_model.IsDirty)
{
if(MessageBox.Show("Model is changed do you want to save it?","",MessageBoxButtons.YesNo")==DialogResult.Yes)
_model.Save();

_model=frm.SelectedModel;
}
}
}


}

你的启动表单应该有这样的界面:

public interface IStartupForm:IDisposable
{
DialogResult ShowDialog(IWin32Window parent);
Model SelectedModel{get;}

}