【问题标题】:Passing variables from main form to input form将变量从主表单传递到输入表单
【发布时间】:2010-11-28 19:47:16
【问题描述】:

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

有什么提示吗?

【问题讨论】:

    标签: winforms forms delegates argument-passing


    【解决方案1】:

    在主窗体上添加公共属性

    public bool IsDirty
    {
        get;set;
    }
    

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

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

    【讨论】:

      【解决方案2】:

      启动表单无法访问您的主表单。您必须将其存储到您想要使用它的地方可以访问的地方。

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

      // 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 的值并在您的启动表单中访问它。

      【讨论】:

        【解决方案3】:

        这是我的建议: 在主窗体中放置一个 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;}
        }
        

        【讨论】:

          猜你喜欢
          • 2012-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-26
          • 1970-01-01
          • 2011-07-14
          • 1970-01-01
          相关资源
          最近更新 更多