6

私は何年もの間、toolstripcontainer 内の複数のツールストリップに苦労してきました。ツールストリップの場所がランダムな VS2008 で記述された現在の .NETv3.5 アプリケーションがあります。これを修正するために多くのカスタム コードが作成されましたが、うまくいきませんでした。

現在、VS2012 で、複数のツールストリップを持つ .NETv4.5 アプリケーションで作業しています。ドッキングされたツールストリップ コンテナーと 4 つのツールストリップを備えたフォームである非常に小さなテスト アプリケーションを作成しました。設計時に、下部に 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 つのツールストリップを並べ替えると、次のようになります。

再注文後

ここで、アプリケーションを閉じて再度開くと、最初の場所が取得されます。

再開後

次に、右側にドッキングされていたツールストリップを上部に移動します。

再注文

アプリケーションを再度開くと、4 番目のツールストリップがまだ一番上にあることがわかります。これは問題ありませんが、順序が正しくありません。最後の 2 つのツールストリップを見てください。

再び開く

もう1つの奇妙なことは、ズームツールストリップを再び右にドッキングできないことです。ツールストリップは消えます:

ここに画像の説明を入力

VS2012 でフォームを開くと、ツールストリップも再配置されます。 設計時間

理由はわかりません。フォームを再開したところです。

VSのデバッグモードではなく、エクスプローラーからexeを実行してテストを行い、スクリーンショットを作成しました。

私が何を意味し、何を必要としているのかがより明確になったことを願っています。どんなアドバイスでも大歓迎です。

4

1 に答える 1

1

私はvb.net 2010を使用しているため、vbの構文を使用していますが、私の答えが役立つことを願っています:

1) ToolStripManager を使用すると、すべてのツールバーのキーを個別に指定することなく、設定を保存およびロードできます。フォームを指定するだけで十分です。フォームの名前をキーとして使用して、フォームの設定が保存されます。

2) ToolStripManager.SaveSettings() および ToolStripManager.LoadSettings() を呼び出して、FormLoad および FormClosing イベント実行サブルーチンで実行時にプログラムでツールバーのレイアウトを変更する何かを先頭に追加しないことが重要です。したがって、これを行う最も安全な方法は、以下のように、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
于 2014-03-22T09:20:04.920 に答える