我有一个简单的问题。我有一个主表单,然后是一个启动表单,我可以从中选择要生成的新3D模型。从启动窗体中选择新的3D模型时,我想先检查我以前的模型是否已保存。我只是想使用委托从主窗体传递一个布尔值到启动窗体,但我似乎无法访问主窗体或其任何变量。我认为这将会如此简单:<代码> frmMain myForm = new frmMain(); </code >,但键入frmMain不会在智能感知中显示任何内容。将变量从主窗体传递给输入窗体
任何提示?
我有一个简单的问题。我有一个主表单,然后是一个启动表单,我可以从中选择要生成的新3D模型。从启动窗体中选择新的3D模型时,我想先检查我以前的模型是否已保存。我只是想使用委托从主窗体传递一个布尔值到启动窗体,但我似乎无法访问主窗体或其任何变量。我认为这将会如此简单:<代码> frmMain myForm = new frmMain(); </code >,但键入frmMain不会在智能感知中显示任何内容。将变量从主窗体传递给输入窗体
任何提示?
添加公共财产的主要形式
public bool IsDirty
{
get;set;
}
,那么你可以在你的启动形式访问this.ParentForm.IsDirty
,
记得要传递给主窗体的引用,当你表现出启动窗体.. startupForm.showDialog(this);
您的主窗体无法通过启动窗体访问。您必须将其存储到某个您想要使用它的位置。
您可以通过以下也做的方式是(连同其他方式:)
// 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的值并在启动窗体中访问它。
这里是我的建议: 发生在你的主要形式的3DModel对象属性:
private Model _model;
声明启动窗体作为一个对话框(如打开文件对话框),做这样的事情:
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;}
}