2009-07-13 20 views
0

まず、何をしようとしているのか、次にそれをどうしようとしているのかを教えてください。より良い方法があれば教えてください。静的メソッドから非静的オブジェクトを変更する

私は2つのフォームで働いていますが - form_preferencesフォームがアップすると

をform_mainそれらを呼び出すとform_preferencesすることができます、私はform_preferences上のボタン(ボタンを保存)をクリックするまで無効にするform_mainたいです。だからここ

は私がやっているものです: ボタンでクリックされたform_main

form_preferences frm_p = new form_preferences(); 
frm_p.Visible = true; 
this.enabled = false; 

//これまでのところは良い

私はform_preferencesに保存ヒットすると、それはform_mainにパブリック静的メソッドを呼び出しますフォームを再び有効にする必要があります。残念ながら、静的メソッドであるため、これを直接行うことはできません。

フォームの新しいインスタンスを作成しようとしましたが、新しいインスタンスを作成して元のインスタンスを破棄しなければならなくなりました。これを行うより良い方法はありますか?

+0

なぜ呼び出すインスタンスではなく、静的メソッドを作成したのか分かりません。 – cdm9002

答えて

1

form_mainメソッドを静的ではなくインスタンスメソッドに変更します。作成時にform_mainのインスタンスをサブフォームに渡すので、参照が保持されます。

+0

私はこれを試しましたが、frm_main.Enabled = trueは、この2番目のフォームを作成したときに渡したmain_formで何もしません。 パブリック部分クラスfrmsettings:フォーム { フォームfrm_main; 公開frmsettings(フォームfrmparent) { InitializeComponent(); frm_main = frmparent; }プライベートボイドcmdsave_settings_Click(オブジェクト送信者、のEventArgs電子) {frm_main.Enabled = TRUE。 this.Close(); } –

+0

フォーマットが保持されないことがわかりませんでした。 私のパブリッククラスでは、渡されたものと同じクラスのグローバル変数を設定するpublic sub_form(Form frmparent){}があります。後で呼ばれると、親に何の影響も与えないようです形。私はここに何かを逃していますか –

+0

さて、frm_main.Enabled = true;は動作しませんが、frm_main.Close();何らかの理由で.... –

0

メインフォームのコピーが1つしかない場合は、フォームをシングルトンとして作成するか、静的メソッド内から静的リファレンスを使用してプログラムにアクセスします。あなたの主な方法で

は、次の...

public static class Program { 

    public static YourFrom form = null; 

    public static void Main(string args[]) { 
    Program.form = new YourFrom(); 
    Application.Run(form); 
    } 
} 

を行うと、あなたはそれにアクセスするためにProgram.formオブジェクトを使用し、あなたのクラスで、フォームオブジェクトにアクセスする必要があるとき。

関連する問題