したがって、この質問に従って、アイテムをクリックしたときにドロップダウンメニューが閉じないようにする方法に対処しようとしています。
リンクされた質問では、そのような回答の 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 に設定することを許可する方法がないことを意味します。ただし、menuItems は別のクラスで動的に生成されるため、参照するイベントやオブジェクトはありません。
このコードは、メイン フォームからメニュー構造をコピーし、それをコピーして "プロファイル ビュー" に再作成します (ユーザーが表示できるもの/できないものを設定するため)。
コントローラーコード:
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 年間ゲームから離れており、これに戻る必要があり、すべてを適切にフォローしているときに少し問題が発生しています。