これを行うための「適切な」組み込みメソッドがあるかどうかはまだわかりません...
それまでの間、サイズが変わるたびに ContextMenuStrip の Bounds() を変更するハックがあります。高さがどれだけ変化しても、ContextMenuStrip を上下にシフトするだけです。ContextMenuStrip の Opened() および SizeChanged() イベントを接続し、最後の Bounds() をクラス レベルの「lastBounds」変数に格納しました。
private Rectangle lastBounds;
private void contextMenuStrip1_Opened(object sender, EventArgs e)
{
lastBounds = contextMenuStrip1.Bounds;
}
private void contextMenuStrip1_SizeChanged(object sender, EventArgs e)
{
Rectangle rc = contextMenuStrip1.Bounds;
int diff = lastBounds.Height - rc.Height;
if (diff > 0)
{
contextMenuStrip1.Bounds = new Rectangle(new Point(rc.X, rc.Y + diff), rc.Size);
lastBounds = contextMenuStrip1.Bounds;
}
else
{
contextMenuStrip1.Bounds = new Rectangle(new Point(rc.X, rc.Y - diff), rc.Size);
lastBounds = contextMenuStrip1.Bounds;
}
}