我对ToolStripPanel.Join有一个非常奇怪的问题,我一直在Google和SO上搜索关于我做错什么的线索,但是我可以'弄明白了。基本上,当我使用ToolStripPanel.Join时,我添加的第一个ToolStrip根本不出现在ToolStripPanel中,但我加入的所有其他ToolStrips都会出现。在我深入细节之前,首先让我说我正在使用C#和VS 2010和.NET 4,并且,对于某些上下文,我试图在用户控件上使用ToolStripPanel,它位于自定义DLL,我们做了这样我们可以在其他形式重用这些用户控件。ToolStripPanel加入方法不是将工具条添加到面板
我以前使用的是ToolStripContainer,但是我决定换用ToolStripPanel,因为我们只需要ToolStripContainer的顶部面板;我没有看到使用ToolStripContainer的重点。由于我无法在工具箱中找到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-->
}
因为我们正在创建工具条,并在代码中把它们添加到ToolStripPanel中,我可以”不要在设计器中看到用户控件的外观。所以,我构建了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 overload Join(toolStrip),则不会显示任何内容。另外,如果我将工具条添加到其他行,即tsPanel.Join(toolstrip3,2)或tsPanel.Join(toolstrip4,3),将出现工具条。
对于一些令人费解的(至少对我来说)理由来说,我添加的第一个工具条永远不会出现,但所有后续的工具条都会这样做。作为一种解决方法,我一直在创建一个虚拟工具条,添加它,然后添加我所有的真实工具条。这感觉很不方便,所以我很想弄清楚为什么会发生这种情况。我试图按照文档on MSDN,但我仍然必须失去一些东西,因为我无法想象这样的错误没有得到修复。
有没有人知道这里可能会出错?与工具条面板中的所有工具条
我把你的代码,并删除杂散成员,这样我可以编译或东西,是不相关的您的问题正在运行的应用的
不知道这是相关的或没有,但以防万一...这个项目是从2008年VS升级和.NET 3.5 VS 2010和.NET 4 – greyseal96 2014-10-13 23:50:50