2016-05-26 24 views
0

Visual C++ MFCには、メニュー項目の状態を設定するための組み込みのメカニズムがあります。私はC#とWindowsFormオブジェクトで同じことをしようとしています。MenuStripのメニュー項目状態の設定

私はかなり同じではありませんこれはこれを見つけた:ここ

Grey out menustrip items when certain forms are open/active/focused

は私のメニュー構造である:

Sub menu

だから、私はこれを試してみることにしました:

private void viewToolStripMenuView_Click(object sender, EventArgs e) 
{ 
    zoomExtentsToolStripMenuItem.Enabled = viewCtrl != null; 
} 

それは仕事の種類です。しかし、私は少しばかげています。アイテムが有効になっているメニューが表示され、が表示され、が表示され、無効になっています。

メニュー項目の状態を正しく設定するにはの前にのメニューが表示されますか?私はこれが簡単な問題のように聞こえるが、同等の方法論を見つけることができないことを知っているON_UPDATE_COMMAND_UI

+1

興味深い質問がある(http://stackoverflow.com/questions/2405592/updating-ui-objects-in-windows-forms) –

+0

@JohnnyMopp [WindowsフォームでのUIオブジェクトの更新]の可能重複同じように見える、ありがとう。しかし、UIを更新するためのバックグラウンドスレッドを行う必要はありません。 Enabledなどに設定するだけでいいはずですが、適切なイベントハンドラを選んで実行します。[表示]メニューの[イベントハンドラをクリックする]の操作は遅すぎます。 –

答えて

1

私は間違ったイベントハンドラを使用していました!

private void viewToolStripMenuView_DropDownOpening(object sender, EventArgs e) 
{ 
    zoomExtentsToolStripMenuItem.Enabled = viewCtrl != null; 
} 
+1

実際これで十分です。バックグラウンドスレッドの理由はありません。このコードは、人間のユーザが知覚できる遅れの最小量よりもはるかに高速です。 WM_INITMENUPOPUPメッセージを本当のメニューで扱うのは、偽のユーザーが描いた.NETのものではなく、道徳的に同等です。 –

関連する問題