1

したがって、この質問に従って、アイテムをクリックしたときにドロップダウンメニューが閉じないようにする方法に対処しようとしています。

リンクされた質問では、そのような回答の 1 つで、AutoCloseプロパティを false に設定することが提案されました。私はそうしました、そしてこれは私が求めたものを達成しました。ただし、私が実装した方法は、ドロップダウン メニューが強制的に開かれることを意味します。

フォームコード:

public void ToolStripMenuItem_Click(object sender, EventArgs e)
{
    ToolStripMenuItem item = sender as ToolStripMenuItem;
    if (item != null)
        item.Checked = !item.Checked;

    item.DropDown.AutoClose = false;
}

AutoClose私はこれがなぜなのか知っています - 実装は、を true に設定することを許可する方法がないことを意味します。ただし、me​​nuItems は別のクラスで動的に生成されるため、参照するイベントやオブジェクトはありません。

このコードは、メイン フォームからメニュー構造をコピーし、それをコピーして "プロファイル ビュー" に再作成します (ユーザーが表示できるもの/できないものを設定するため)。

コントローラーコード:

private void PopulateProfileView(User_AccessProfilesView view, Menu_View mainMenu)
{
    // Disabled Items are not able to be set, becasue they are either always visible for every user,
    // or only visible to specific users (Administrator)
    List<string> disabledMenuItems = new List<string>();
    List<string> disabledSubMenuItems = new List<string>();

    bool error = false;          
    bool subError = false;
    _groupDictionary = new Dictionary<string, List<string>>();

    // Populate the disallowed Menu Items from the Main Menu,
    // and then add the items specific to the Profile View
    disabledMenuItems.Add("File");
    disabledMenuItems.Add("Administrator");
    disabledMenuItems.Add("Help");
    disabledMenuItems.Add("Te&rminations");
    disabledMenuItems.AddRange(mainMenu.disallowedMenuItems);

    // Populate the disallowed Sub Menu Items from the Main Menu,
    // and then add the items specific to the Profile View
    disabledSubMenuItems.Add("View All");
    disabledSubMenuItems.AddRange(mainMenu.disallowedSubItems);

    foreach (ToolStripMenuItem item in mainMenu.mainMenuStrip.Items)
    {
        ToolStripMenuItem menuItem = new ToolStripMenuItem(item.Text);

        if (error == false)
        {
            // Add to the menu bar
            view.menuStrip.Items.Add(menuItem);
            menuItem.Click += new EventHandler(view.ToolStripMenuItem_Click);

            foreach (ToolStripItem dropItem in item.DropDownItems)
            {
                if (dropItem is ToolStripMenuItem)
                {
                    ToolStripMenuItem menuDropItem = new ToolStripMenuItem(dropItem.Text);

                    // Same concerns as above with regards to doing a substring check
                    // to decide if menu items should be excluded or not.
                    foreach (string s1 in disabledSubMenuItems)
                    {
                        if (!menuDropItem.Text.Contains(s1))
                        {
                            subError = false;
                        }
                        else
                        {
                            subError = true;
                            break;
                        }
                    }

                    if (!subError)
                    {
                        menuItem.DropDownItems.Add(menuDropItem);
                        menuDropItem.Click += new EventHandler(view.ToolStripMenuItem_Click);
                    }
                }
                else if (dropItem is ToolStripSeparator)
                { menuItem.DropDownItems.Add(new ToolStripSeparator()); }
            }

メニュー項目をクリックしてもメニューが閉じずAutoClose、メニュー ヘッダーをクリックしたり、マウスをメニューから離したり、別のメニューを選択したり (またはマウスオーバー)、メニューは閉じる?


これが単純な問題である場合はお詫び申し上げます - 私は約 1 年間ゲームから離れており、これに戻る必要があり、すべてを適切にフォローしているときに少し問題が発生しています。

4

1 に答える 1