0

簡単な質問があります。メイン フォームと、生成する新しい 3D モデルを選択できるスタートアップ フォームがあります。起動フォームから新しい 3D モデルを選択するとき、以前に作業したモデルが保存されているかどうかを最初に確認したい。デリゲートを使用してメイン フォームからスタートアップ フォームにブール値を渡したいだけですが、メイン フォームまたはその変数にアクセスできないようです。<code>frmMain myForm = new frmMain();</code> と言うのと同じくらい簡単だと思ったのですが、frmMain と入力してもインテリセンスでは何も表示されません。

ヒントはありますか?

4

3 に答える 3

3

メインフォームにパブリックプロパティを追加します

public bool IsDirty
{
    get;set;
}

this.ParentForm.IsDirtyその後、スタートアップフォームでアクセスできます。

スタートアップフォームを表示するときは、メインフォームへの参照を渡すことを忘れないでください...startupForm.showDialog(this);

于 2009-09-16T14:08:48.587 に答える
0

これが私の提案です:メインフォームに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;}
}
于 2009-09-16T14:21:43.967 に答える
0

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.

于 2009-09-16T14:10:19.933 に答える