多年来,我一直在一个工具箱容器中使用多个工具箱。
我有一个用VS2008编写的当前.NETv3.5应用程序,其中工具条的位置是随机的。已经做了很多自定义代码来解决此问题,但是没有任何运气。
目前,我正在VS2012上的.NETv4.5应用程序上工作,该应用程序也具有多个工具栏。
我创建了一个非常小的测试应用程序,该应用程序是带有停靠的toolstripcontainer和4个toolstrips的表单。在设计时,我在底部添加了3个工具条,在右侧添加了1条工具条。
无需添加任何代码并启动此应用程序,我的工具栏与设计时位于相同的位置。现在,我对3个顶级工具条进行重新排序,然后重新启动应用程序。
我的重新排序更改未保存,工具条又像设计时一样。
现在,我添加以下代码行:
public partial class Toolstrips : Form
{
private string keyName;
public Toolstrips()
{
this.InitializeComponent();
this.keyName = Application.ProductName + this.Name + "xyz";
ToolStripManager.LoadSettings(this, this.keyName);
}
private void Toolstrips_FormClosing(object sender, FormClosingEventArgs e)
{
ToolStripManager.SaveSettings(this, this.keyName);
}
}
仍然在带有.NETv4.5的VS2102中,此方法不起作用。
重新启动应用程序后,我可以重新排序所需的所有工具条,并将它们还原到设计时的位置。
我曾希望在VS2012中解决此问题,但显然不会。
有人在解决这个问题吗?
编辑:添加了内容user.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripTable" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripPan" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripStandard" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripZoom" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripTable>
<setting name="ItemOrder" serializeAs="String">
<value>toolStripButton4</value>
</setting>
<setting name="IsDefault" serializeAs="String">
<value>False</value>
</setting>
<setting name="Size" serializeAs="String">
<value>29, 42</value>
</setting>
<setting name="ToolStripPanelName" serializeAs="String">
<value>toolStripContainer1.Right</value>
</setting>
<setting name="Visible" serializeAs="String">
<value>True</value>
</setting>
<setting name="Location" serializeAs="String">
<value>0, 336</value>
</setting>
<setting name="Name" serializeAs="String">
<value>toolStripTable</value>
</setting>
</System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripTable>
<System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripPan>
<setting name="ItemOrder" serializeAs="String">
<value>toolStripButton3</value>
</setting>
<setting name="IsDefault" serializeAs="String">
<value>False</value>
</setting>
<setting name="Size" serializeAs="String">
<value>40, 31</value>
</setting>
<setting name="ToolStripPanelName" serializeAs="String">
<value>toolStripContainer2.Top</value>
</setting>
<setting name="Visible" serializeAs="String">
<value>False</value>
</setting>
<setting name="Location" serializeAs="String">
<value>288, 0</value>
</setting>
<setting name="Name" serializeAs="String">
<value>toolStripPan</value>
</setting>
</System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripPan>
<System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripStandard>
<setting name="ItemOrder" serializeAs="String">
<value>newToolStripButton,openToolStripButton,saveToolStripButton,printToolStripButton,toolStripSeparator,cutToolStripButton,copyToolStripButton,pasteToolStripButton,toolStripSeparator1,helpToolStripButton</value>
</setting>
<setting name="IsDefault" serializeAs="String">
<value>False</value>
</setting>
<setting name="Size" serializeAs="String">
<value>248, 31</value>
</setting>
<setting name="ToolStripPanelName" serializeAs="String">
<value>toolStripContainer2.Top</value>
</setting>
<setting name="Visible" serializeAs="String">
<value>False</value>
</setting>
<setting name="Location" serializeAs="String">
<value>6, 0</value>
</setting>
<setting name="Name" serializeAs="String">
<value>toolStripStandard</value>
</setting>
</System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripStandard>
<System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripZoom>
<setting name="ItemOrder" serializeAs="String">
<value>toolStripButton1,toolStripButton2</value>
</setting>
<setting name="IsDefault" serializeAs="String">
<value>False</value>
</setting>
<setting name="Size" serializeAs="String">
<value>29, 73</value>
</setting>
<setting name="ToolStripPanelName" serializeAs="String">
<value>toolStripContainer2.Right</value>
</setting>
<setting name="Visible" serializeAs="String">
<value>False</value>
</setting>
<setting name="Location" serializeAs="String">
<value>0, 71</value>
</setting>
<setting name="Name" serializeAs="String">
<value>toolStripZoom</value>
</setting>
</System.Windows.Forms.ToolStripSettings.GUI-prototypeToolstripsxyz.toolStripZoom>
</userSettings>
</configuration>
EDIT2
我创建了一个用C#编写的小型VS2012应用程序,以说明我的问题。您可以在这里下载:https://mapwindow5.svn.codeplex.com/svn/tmp/ToolstripDemo/ToolstripDemo.zip
当我启动应用程序时,我看到:
当我重新排序3个顶级工具条时,我得到以下信息:
现在,我关闭了该应用程序,然后再次将其重新打开,得到了初始位置:
现在,将固定在右侧的工具栏移动到顶部:
我重新打开该应用程序,然后看到第四个工具栏仍位于顶部,可以,但顺序不正确。查看最后两个工具条:
另一个奇怪的事情是我无法再次将缩放工具条重新停靠在右侧。工具条只是消失了:
当我在VS2012中打开表单时,工具栏也会重新排列:
我不知道为什么。我只是重新打开表格。
我进行了测试,并通过从资源管理器而不是在VS的 Debug模式下运行exe来制作了屏幕截图。
我希望现在可以清楚我的意思和需要的内容。
任何建议都非常感谢。
最佳答案
我使用vb.net 2010,所以我使用vb的语法,但我希望我的回答会有所帮助:
1)使用ToolStripManager,可以保存和加载设置,而无需分别为所有工具栏指定键。指定一个表单就足够了-将使用表单名称作为键来保存表单的设置。
2)重要的是在运行时在FormLoad和FormClosing事件运行子例程中调用ToolStripManager.SaveSettings()和ToolStripManager.LoadSettings()时不要以其他方式通过编程更改工具栏的布局作为前提。因此,最安全的方法是在FormClosing和FormLoad子菜单中首先调用方法,如下所示:
Private Sub Explorer1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ToolStripManager.LoadSettings(Me)'Me is the form, for which we save the toolbars settings
'further code in this subroutine
End Sub
Private Sub Explorer1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
ToolStripManager.SaveSettings(Me)
My.Settings.Save()
'further code in this subroutine
End Sub
关于c# - 保存Toolstrip的用户位置在VS2012中仍然不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18869095/