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