【问题标题】:Sharing MenuStrip between Forms在表单之间共享 MenuStrip
【发布时间】:2022-04-04 02:17:10
【问题描述】:

我有一个与此相关的问题:How to create navigation inside program Form - 再次提醒新手。

我正在尝试在 C# 程序中创建导航,就像网站上的动态下拉菜单一样。我正在使用不同的 C# 表单,例如每一个都是具有不同内容的网页。

是否可以在表单之间共享带有导航的菜单条? (最简单的网络相似性:include('menu.php') - 将所有内容放入我在每个网页上包含的文件中)

否则需要将 menustrip 复制到每个新表单(然后 MenuStrip 更改,然后呢?再次复制它们?:))

【问题讨论】:

  • 你有“窗口形式”,每个里面都有一个“网页”?你为什么要那样做?
  • 我没有网页 :) 我是一名尝试学习 c# 的网络开发人员 - 所以我使用相似性来描述我想做的事情。我想做的是在更大的 c# 程序中创建内部程序导航。
  • MDI 看起来很有趣 - 我会去看看。

标签: c# menustrip


【解决方案1】:

例如,如果您想在 ContextMenu 和主窗体 MenuStrip 之间共享项目

没有项目的MenuStrip

上下文菜单项

具有从 ContextMenu 复制的项目的 ContextMenu

在主窗体上您可以执行以下操作:

ToolStripMenuItem toolStripMoved;
ToolStripItem[] itemsArrayMoved;

private void Edit_DropDownOpening(object sender, EventArgs e)
{
    var doc = DockPanel.GetDocuments().FirstOrDefault(t => t.Visible) as DockDocument;
    if (doc != null)
    {
        toolStripMoved = doc.ContextMenuStrip.Items["Edit"] as ToolStripMenuItem;
        if (toolStripMoved != null)
        {
            var menu = (sender as ToolStripMenuItem);
            itemsArrayMoved = Helper.GetAllChildren(toolStripMoved);
            foreach (ToolStripItem item in itemsArrayMoved)
            {
                if (item.Name.Equals("Edit") == false)
                    menu.DropDownItems.Add(item);
            }
        }
    }
}

private void Edit_DropDownClosed(object sender, EventArgs e)
{
    if (toolStripMoved != null)
    {
        foreach (ToolStripItem item in itemsArrayMoved)
        {
            if (item.Name.Equals("Edit") == false)
                toolStripMoved.DropDownItems.Add(item);
        }
    }
}

static private ToolStripItem[] GetAllChildren(ToolStripItem item)
{
    List<ToolStripItem> Items = new List<ToolStripItem>() { item };
    if (item is ToolStripMenuItem)
        foreach (ToolStripItem i in ((ToolStripMenuItem)item).DropDownItems)
            Items.AddRange(GetAllChildren(i));
    else if (item is ToolStripSplitButton)
        foreach (ToolStripItem i in ((ToolStripSplitButton)item).DropDownItems)
            Items.AddRange(GetAllChildren(i));
    else if (item is ToolStripDropDownButton)
        foreach (ToolStripItem i in ((ToolStripDropDownButton)item).DropDownItems)
            Items.AddRange(GetAllChildren(i));
    return Items.ToArray();
}

【讨论】:

    【解决方案2】:

    您可以通过像这样使用 Srip Meni 加入标签来做到这一点:

    //make tabs invisible (so you wont see them changing)
    private void HideAllTabsOnTabControl(TabControl theTabControl)
    {
        theTabControl.Appearance = TabAppearance.FlatButtons;
        theTabControl.ItemSize = new Size(0, 1);
        theTabControl.SizeMode = TabSizeMode.Fixed;
    }
    
    //hide all tabs
    private void hide_all_tabs() {
        Tab_content.TabPages.Remove(tabPage1);
        Tab_content.TabPages.Remove(tabPage2);
        Tab_content.TabPages.Remove(tabPage3);
        Tab_content.TabPages.Remove(tabPage4);
    }
    private void materiałyQCToolStripMenuItem_Click(object sender, EventArgs e)
    {
        hide_all_tabs(); //hide everything
        Tab_content.TabPages.Add(tabPage1); //schow just first tab
    }
    private void analizatoryQCToolStripMenuItem_Click(object sender, EventArgs e)
    {
        hide_all_tabs();
        Tab_content.TabPages.Add(tabPage2);
    }
    private void QCzDzisiajToolStripMenuItem_Click(object sender, EventArgs e)
    {
        hide_all_tabs();
        Tab_content.TabPages.Add(tabPage3);
    }
    private void standlabToolStripMenuItem_Click(object sender, EventArgs e)
    {
        hide_all_tabs();
        Tab_content.TabPages.Add(tabPage4);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多