3

メインウィンドウ(mdiコンテナ)のmenuStrip項目テキストを子ウィンドウから変更したいのですが、

このようなもの:

ファイル
- ログイン

ファイル
- ログアウト

4

3 に答える 3

3

メイン ウィンドウでこれらを追加します。

public static MainForm Current;

public string FileLogin
{
    get { return fileLoginToolStripMenuItem.Text; }
    set { fileLoginToolStripMenuItem.Text = value; }
}

明らかに、ログイン/ログアウト メニュー項目のメニュー ストリップ項目に設定した、または自動的に設定された名前を使用します。次に、メイン フォームのフォーム コンストラクターで、Current を設定します。

public MainForm()
{
    InitializeComponent();
    Current = this;
}

次に、他のウィンドウ/フォームから(値を設定するために)呼び出すことができます:

MainForm.Current.FileLogin = "Logout";

しかし、これよりも良いのは、子ウィンドウでイベントを作成することです。

public event Action UserLoggedIn = delegate { };

MainForm では、上記と逆の方法で MainForm をそのイベントにサブスクライブさせます...

ChildForm.Current.UserLoggedIn += () => FileLogin = "Logout";

そして、ユーザーがログインしたときに子にイベントを発生させますUserLoggedIn()

于 2012-06-17T21:56:45.107 に答える
2

MDI コンテナーに、その子のいずれかから呼び出し可能なパブリック メソッドを追加できます。
このメソッドが呼び出されたとしましょうSetLoggedStatus

(MDI コンテナー内)

public void SetLoggedStatus(bool status)
{
    ToolStripMenuItem loginMenu = MenuStrip1.Items(0) as ToolStripMenuItem:
    loginMenu.DropDownItems[0].Text = (status == true ? "Logout" : "Login");
}

ここで、MDI 子フォームからこのパブリック メソッドを呼び出す必要があります。すべての MDIChild フォームには、MDIParent を指すプロパティがあります。そのプロパティを使用して、汎用フォーム インスタンスを正しい MDI 親にキャストできます。

(ログイン後のMDIChildで、MDIParentがMyParentFormという名前のフォームクラスであると仮定)

MyParentForm f = this.MDIParent as MyParentForm;
if(f != null) 
    f.SetLoggedStatus(true);
于 2012-06-17T22:02:33.520 に答える
1

これは、MDI 子からメイン メニュー項目にアクセスする方法です。

// this button in the child form
private void button1_Click(object sender, EventArgs e) {  
   ToolStripMenuItem tsm;
   // file menu
   tsm = (ToolStripMenuItem)this.MdiParent.MainMenuStrip.Items[0];
   MessageBox.Show( tsm.DropDownItems[0].Name);
   // first menu under File Menu
   tsm.DropDownItems[0].BackColor = Color.Red;
   // second menu under File Menu
   tsm.DropDownItems[1].BackColor = Color.Wheat;
}

フォントやテキストも同じ方法で変更できます。バックカラーの代わりに使用できます.text

于 2012-09-08T08:49:49.567 に答える