6

ss

スクリーンショットでは、その空きスペースを緑色の四角形でマークしました。ToolStripMenuItem で左右のスペースを同じサイズにしたいのですが、右側には削除できない大きな空き領域があります。

コード:

    private void UpdateWorkflowsMenu()
    {
        ((ToolStripDropDownMenu)tsddbWorkflows.DropDown).ShowImageMargin = false;

        tsddbWorkflows.DropDownItems.Clear();

        Program.HotkeyManager.Hotkeys.ForEach<HotkeySettings>(x =>
        {
            if (x.TaskSettings.Job != HotkeyType.None && (!Program.Settings.WorkflowsOnlyShowEdited || !x.TaskSettings.IsUsingDefaultSettings))
            {
                ToolStripMenuItem tsmi = new ToolStripMenuItem(x.TaskSettings.Description);
                if (x.HotkeyInfo.IsValidHotkey) tsmi.ShortcutKeyDisplayString = " " + x.HotkeyInfo.ToString();
                tsmi.Click += (sender, e) => HandleTask(x.TaskSettings);
                tsddbWorkflows.DropDownItems.Add(tsmi);
            }
        });

        tsddbWorkflows.Visible = tsddbWorkflows.DropDownItems.Count > 0;
    }
4

3 に答える 3

0

上で回答したように、このスペースは「サブメニューを開く」矢印用に予約されており、一般的にこれに触れることはお勧めしませんが、もちろんそのスペースを削除することは可能です。実際、それを行う方法はいくつかありますが、いずれもコーディングが必要です。これを行う最も簡単な方法のスニペットですが、予想される幅を知っておく必要があります (ToolstripItem.GetPreferredSize で計算できます)。

private void RecentButton_DropDownOpening(object sender, EventArgs e)
{
  ToolStripDropDownItem RecentButton = (ToolStripDropDownItem)sender;
  RecentButton.DropDown.SuspendLayout();
  try
  {
    RecentButton.DropDownItems.Clear();

    // Populate items

    RecentButton.DropDown.MinimumSize = new Size(RecentButton.Bounds.Right - DisplayRectangle.Left, 0);
    RecentButton.DropDown.MaximumSize = RecentButton.DropDown.MinimumSize;
  }
  finally
  {
    RecentButton.DropDown.ResumeLayout();
  }
}

ToolStip エンジンは一般に非常に柔軟であり、その内部構造を知っていれば、それを使用して非常に興味深いものを実装することができます。

于 2014-05-21T09:15:50.427 に答える