0

上部に MenuStrip があるプログラムがあり、現在 4 つの項目があります。私が本質的にやろうとしているのは、ユーザーが幅を縮小した場合に、これら 4 つのメニュー項目すべてが表示されるようにすることです。

私の最初の試みは、単純にアイテム コレクションを取得してから、ストリップの最後のアイテムの境界を取得することで、MenuStrip のアイテムの総数を取得することでした。bounds 変数を取得した後、bounds.x + bounds.width を簡単に計算して、form.width がそれより小さくないことを確認します。そうであれば、サイズを変更します。このすべては、フォームの ResizeEnd イベント内で行われます。

private void F_Main_ResizeEnd(object sender, EventArgs e)
    {
        ToolStripItemCollection t_col = menuStrip1.Items;
        int _howMany = t_col.Count;
        var mi_bounds = t_col[_howMany - 1].Bounds;
        if (this.Width < (mi_bounds.X + mi_bounds.Width))
           this.Width = (mi_bounds.X + mi_bounds.Width);
    }

現在、ほとんどの場合、コードは機能しているようです。2 番目または 3 番目の項目が消えるようにフォームを縮小すると、サイズ変更が細すぎて 4 番目のメニューが見えなくなることがわかりました。その時点で、興味深いことに、フォームの右端をクリックするだけで、フォームのサイズを変更するだけでフォームを移動しないようにすると、正しい幅に戻り、4 つのメニュー項目がすべて表示されます。

私が見つけたのは、toolstripmenuitem の境界プロパティが変更され、4 つすべてを表示してサイズ変更を開始したときに値 {a} であり、3 つだけが表示されていたときに値 {b} であったことです。

私は現在、すべてのメニュー項目が表示され、フォームが適切な幅にサイズ変更されることを確認するためのより信頼できる方法を見つけようとしています。

これは私にとって奇妙な問題であるため、これが適切に説明されていない場合は申し訳ありません。

4

1 に答える 1

0

「現在、すべてのメニュー項目が表示され、フォームが適切な幅にサイズ変更されることを確認する、より信頼できる方法を見つけようとしています。」

フォームが小さすぎるのを防ぐためにサイズ変更イベントを使用するのは、扱いにくい方法です。

フォームの最小幅と高さのプロパティを設定することを強くお勧めします。

編集:

メニューが作成された後、および/または新しいものが追加された後、これらのプロパティを実行時に設定することをお勧めします。次の(疑似)コードを実行します。

ToolStripItemCollection t_col = menuStrip1.Items;
int _howMany = t_col.Count;
var mi_bounds = t_col[_howMany - 1].Bounds;
if (this.Width < (mi_bounds.X + mi_bounds.Width))
{
var minimumFormHeight = 20;
this.MinimumSize = new Size((mi_bounds.X + mi_bounds.Width), minimumFormHeight);
}
于 2012-06-30T06:28:34.153 に答える