У меня очень странная проблема с ToolStripPanel.Join, и я искал в Google и SO некоторые сведения о том, что я делаю неправильно, но я могу " t понять это. В основном, когда я использую ToolStripPanel.Join, первый ToolStrip, который я добавляю, вообще не отображается в ToolStripPanel, но появятся все другие ToolStrips, которые я присоединю. Прежде чем я углубится в подробности, позвольте мне сначала сказать, что я использую C# и VS 2010 и .NET 4, и только для некоторого контекста я пытаюсь использовать ToolStripPanel для пользовательского элемента управления, который находится внутри custom dll, которые мы сделали, чтобы мы могли повторно использовать эти пользовательские элементы управления в других формах.Метод ToolStripPanel Join не добавляет инструментальную панель к панели
Я ранее использовал ToolStripContainer, но решил переключиться на использование ToolStripPanel, так как нам действительно нужна была верхняя панель ToolStripContainer; Я не видел смысла использовать ToolStripContainer. Поскольку я не мог найти элемент управления ToolStripPanel в Toolbox, я решил добавить его сам в файл 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, и когда форма открывается, нет инструментальной панели; он просто не появляется. Вот что странно. Если добавить только еще один ToolStrip к панели, второй ToolStrip появится:
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-->
}
В приведенном выше коде, первый ToolStrip, что я создаю не будет появляться, но второй один (openSaveToolStrip2) появится. Кстати, если я просто использую Join overload Join (toolStrip) для обеих панелей инструментов, ничего не появляется. Кроме того, если я добавлю инструментальные панели в другие строки, т. Е. TsPanel.Join (toolstrip3, 2) или tsPanel.Join (toolstrip4, 3), появятся панели инструментов.
Похоже, что для какой-то необъяснимой (по крайней мере, для меня) причины первая панель инструментов, которую я добавляю, никогда не появляется, но все последующие панели инструментов делают. В качестве обходного пути я просто создал манекенную панель инструментов, добавив ее, а затем добавив все свои настоящие инструментальные панели. Это кажется довольно взломанным, поэтому я хотел бы выяснить, почему это происходит. Я попытался выполнить документацию on MSDN, но мне все равно не хватает чего-то, потому что я не могу представить, что ошибка, подобная этой, не исправляется.
Кто-нибудь знает, что здесь может быть неправильным?
Не уверен, если это уместно, или нет, но на всякий случай ... Этот проект был повышен с VS 2008 и .NET 3.5 для VS 2010 и .NET 4. – greyseal96