4

ボタン(btnMassEdit)を左クリックしたときに表示したいContextMenuStrip(ctMenuMassEdit)があります。ContextMenuStripをボタンの上に表示したい、つまりボタンに対する相対的な位置(0、-ContextMenuStrip.Height):

private void btnMassEdit_Click(object sender, EventArgs e)
{
    ctMenuMassEdit.Show(btnMassEdit, new Point(0, -ctMenuMassEdit.Height));
}

ただし、ボタンが最初にクリックされたときのHeightプロパティは0であり(最初に表示される前にContextMenuStripが作成されていないと思います)、その結果、ContextMenuStripがボタンの上に表示されます。ただし、2回目にボタンをクリックすると、正しい位置に表示されるため、ロジックの基本は少なくとも正しいです。

ContextMenuStripを表示する前に以下を追加しようとしましたが、期待どおりに機能しませんでした。

if (!ctMenuMassEdit.Created)
{
    ctMenuMassEdit.CreateControl();
}

それで、最初に表示する前にContextMenuStripを作成する方法はありますか?それで、正しいHeightプロパティがありますか?もちろん、それを表示し、非表示にして、もう一度表示するというハックを使用することもできますが、それは本当にきれいではないようです...

4

2 に答える 2

2

ctMenuMassEdit.Show(btnMassEdit、Me.PointToScreen(btnMassEdit.Location)、ToolStripDropDownDirection.AboveRight);はどうですか。

于 2010-06-02T02:42:01.773 に答える
0

他に誰も提案をしなかったので、私は自分の解決策になったものを共有することができます。これは実際には解決策ではなく、ハックですが、非表示にして最初に再度表示すると、機能します。

private void btnMassEdit_Click(object sender, EventArgs e)
{
    if (ctMenuMassEdit.Height < 5)
    {
        ctMenuMassEdit.Show(btnMassEdit, new Point(0, -ctMenuMassEdit.Height));
        ctMenuMassEdit.Hide();
    }
    ctMenuMassEdit.Show(btnMassEdit, new Point(0, -ctMenuMassEdit.Height));
}

なぜ私が単に高さ==0ではなく高さ<5をチェックするのか不思議に思うかもしれません。奇妙な理由で、最初に表示する前のContextMenuStripの高さは4であるように見えたので(想定されるように0ではありません)、ハック内のさらに別のハックです;)

于 2010-05-25T06:47:38.370 に答える