我有一个简单的问题。我有一个主表单,然后是一个启动表单,我可以从中选择一个新的 3D 模型来生成。从启动表单中选择新的 3D 模型时,我想首先检查我之前处理的模型是否已保存。我只是想使用委托将一个布尔值从主窗体传递给启动窗体,但我似乎无法访问主窗体或其任何变量。我认为这就像说:<code>frmMain myForm = new frmMain();</code> 一样简单,但是键入 frmMain 不会在智能感知中显示任何内容。
有什么提示吗?
我有一个简单的问题。我有一个主表单,然后是一个启动表单,我可以从中选择一个新的 3D 模型来生成。从启动表单中选择新的 3D 模型时,我想首先检查我之前处理的模型是否已保存。我只是想使用委托将一个布尔值从主窗体传递给启动窗体,但我似乎无法访问主窗体或其任何变量。我认为这就像说:<code>frmMain myForm = new frmMain();</code> 一样简单,但是键入 frmMain 不会在智能感知中显示任何内容。
有什么提示吗?
在主窗体上添加公共属性
public bool IsDirty
{
get;set;
}
然后你可以this.ParentForm.IsDirty
在你的启动表格中访问,
记得在显示启动表单时传递对主表单的引用...startupForm.showDialog(this);
Your main form is not accessible to Startup form.You have to store it to something that is accessible at a point where you want to use it.
You can do it by following way also ( along with other ways :)
// This class is mainly used to transfer values in between different components of the system
public class CCurrent
{
public static Boolean Saved = false;
}
make sure you put this class in namespace which is accessible to both the forms.
Now In your frmMain form set the value of CCurrent.Saved and access it in your startup form.
这是我的建议:在主窗体中放置一个 3DModel 对象属性:
private Model _model;
将您的启动表单声明为对话框(如 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;}
}