我对 ToolStripPanel.Join 有一个非常奇怪的问题,我一直在 Google 和 SO 上搜索一些关于我做错了什么的线索,但我无法弄清楚。基本上,当我使用 ToolStripPanel.Join 时,我添加的第一个 ToolStrip 根本不会出现在 ToolStripPanel 中,但我加入的所有其他 ToolStrip 都会出现。在我深入细节之前,让我先说我正在使用 C# 和 VS 2010 和 .NET 4,并且,就某些上下文而言,我正在尝试在位于内部的用户控件上使用 ToolStripPanel我们制作的自定义 dll,以便我们可以在其他形式中重用这些用户控件。
我之前使用的是 ToolStripContainer,但我决定改用 ToolStripPanel,因为我们只需要 ToolStripContainer 的顶部面板;我没有看到使用 ToolStripContainer 的意义。由于在 Toolbox 中找不到 ToolStripPanel 控件,我决定自己将其添加到 Designer.cs 文件中。我是这样做的:
private ToolStripPanel tsPanel;
<--Other code here-->
private void InitializeComponent()
{
this.tsPanel = new System.Windows.Forms.ToolStripPanel();
<--Other code here-->
//
// tsPanel
//
this.tsPanel.Dock = System.Windows.Forms.DockStyle.Top;
this.tsPanel.Location = new System.Drawing.Point(0, 0);
this.tsPanel.Margin = new System.Windows.Forms.Padding(3);
this.tsPanel.Name = "tsPanel";
this.tsPanel.Orientation = System.Windows.Forms.Orientation.Horizontal;
this.tsPanel.RowMargin = new System.Windows.Forms.Padding(3, 0, 0, 0);
this.tsPanel.Size = new System.Drawing.Size(1000, 0);
<--Other code here-->
//
// MFDesigner
//
this.BackColor = System.Drawing.Color.Gainsboro;
<--Add other controls to UC Controls collection-->
this.Controls.Add(this.tsPanel);
this.ForeColor = System.Drawing.Color.Black;
this.Name = "MFDesigner";
this.Size = new System.Drawing.Size(1000, 670);
this.Load += new System.EventHandler(this.MultiFormatDesignerControl_Load);
this.Resize += new System.EventHandler(this.MFDesigner_Resize);
this.pnlToolbox.ResumeLayout(false);
this.pnlProperties.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
然后,在用户控件的构造函数中,我有:
public MFDesigner()
{
InitializeComponent();
<--Other code here-->
ToolStripButton[] openSaveButtonArr = new ToolStripButton[]{
//The createToolStripButton method creates toolstrip buttons using some simple
//parameters.
createToolStripButton("Open", Images.CmdOpen, new EventHandler(this.OnOpen), "Open saved file"),
createToolStripButton("Save", Images.CmdSave, new EventHandler(this.OnSaveToDisk), "Save to disk")
};
ToolStrip openSaveToolStrip = new ToolStrip(openSaveButtonArr);
tspanel.Join(openSaveToolStrip);
<--Other code here-->
}
由于我们正在创建工具条并将它们添加到代码中的工具条面板中,因此我无法在用户控件的设计器中看到它的外观。因此,我构建了 dll,然后转到另一个项目中的另一个表单,该项目使用 dll 中的用户控件,当表单打开时,没有工具条;它根本没有出现。不过,这是奇怪的事情。如果我在面板中再添加一个工具条,则会出现第二个工具条:
public MFDesigner()
{
InitializeComponent();
<--Other code here-->
ToolStripButton[] openSaveButtonArr = new ToolStripButton[]{
//The createToolStripButton method creates toolstrip buttons using some simple
//parameters.
createToolStripButton("Open", Images.CmdOpen, new EventHandler(this.OnOpen), "Open saved file"),
createToolStripButton("Save", Images.CmdSave, new EventHandler(this.OnSaveToDisk), "Save to disk")
};
ToolStrip openSaveToolStrip = new ToolStrip(openSaveButtonArr);
tspanel.Join(openSaveToolStrip, 1);
ToolStripButton[] openSaveButtonArr2 = new ToolStripButton[]{
createToolStripButton("Open2", Images.CmdOpen, new EventHandler(this.OnOpen), "Open saved rpx file 2"),
createToolStripButton("Save2", Images.CmdSave, new EventHandler(this.OnSaveToDisk), "Save to disk 2")
};
ToolStrip openSaveToolStrip2 = new ToolStrip(openSaveButtonArr2);
tsPanel.Join(openSaveToolStrip2, 1);
<--Other code here-->
}
在上面的代码中,我创建的第一个工具条不会出现,但会出现第二个(openSaveToolStrip2)。顺便说一句,如果我只对两个工具条使用 Join 重载 Join(toolStrip),则什么都不会出现。此外,如果我将工具条添加到其他行,即 tsPanel.Join(toolstrip3, 2) 或 tsPanel.Join(toolstrip4, 3),则会出现工具条。
似乎,出于某种莫名其妙(至少对我而言)的原因,我添加的第一个工具条从未出现,但所有后续工具条都会出现。作为一种解决方法,我一直在创建一个虚拟工具条,添加它,然后添加我所有的真实工具条。这感觉很hacky,所以我很想弄清楚为什么会这样。我试图按照MSDN 上的文档进行操作,但我仍然必须遗漏一些东西,因为我无法想象像这样的错误没有得到修复。
有人知道这里可能出了什么问题吗?