4

私はVB Winformsプロジェクトに取り組んでおり(C#ソリューションでも問題ありませんが)、次のように設定しています:

  • フォームに ContextMenuStrip があり、msCreateReports
  • フォームの上部に MenuStrip があり、1 つのメニュー項目がCreate Reportsあり、そのDropDown設定がmsCreateReports
  • フォームにコマンドボタンがありますcmdCreateReports

さて、私のコマンド ボタンには、そのclickイベント用の次のコードがあります。

Private Sub cmdCreateReports_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCreateReports.Click
    msCreateReports.Show(Cursor.Position.X, Cursor.Position.Y)
End Sub

編集(更新/説明):


基本的に、私が機能的に探しているのは、ユーザーがクリックした場所に応じて、このコンテキストメニューストリップを2つの異なる場所のいずれかに表示できるようにすることです...メニューオプションをクリックすると、コンテキストメニューが次のように表示されますCreate Reportsメニュー項目のドロップダウンまたはユーザーがコマンド ボタンをクリックすると、マウス ポインターの横にコンテキスト メニューとしてメニューが表示されます。ユーザーがクリックしてこのメ​​ニューを表示する場所に応じて、これら 2 つの場所のいずれかに同じメニューを表示できるようにします。


ここで、私の問題は、コマンド ボタンが初めてクリックされたときだけ、ContextMenuStrip がコマンド ボタンの上ではなく、メニューの一番上に表示されることです。

最初のクリック後、メニューは正しい場所に表示されます...何が間違っていましたか/どうすれば修正できますか??

ありがとう!!

4

3 に答える 3

4

同じ問題があります (Visual Studio 2010 SP1 と C# を使用しています)。私たちは何か間違ったことをしたとは思いません。私には Winforms のバグのように見えます。

私は次のように修正しました:

1)DropDownメイン ストリップ アイテムのプロパティを (ビジュアル デザイナーを使用して) 設定解除しました。

2) contextMenuStrip で Opening イベントを定義し、メイン ストリップ項目で DropDownOpening イベントを次のように定義しました。

private void toolStripMyMenuItem_DropDownOpening(object sender, EventArgs e)
{
    toolStripMyMenuItemMyLists.DropDown = contextMenuStrip;
}

private void contextMenuStrip_Opening(object sender, CancelEventArgs e)
{
    toolStripMyMenuItemMyLists.DropDown = contextMenuStrip;
}

そして、私はもうこの問題を抱えていません。それもあなたに役立つことを願っています:-)

于 2013-04-24T08:47:03.230 に答える
2

Cursor.Position.XフォームにCursor.Position.Y関連しているため、Overloaded メソッドを使用する必要がありますContextMenuStrip.Show(Control control, Point pos)

例 :

//control = the control you have added context menu
msCreateReports.Show(control, new Point(Cursor.Position.X, Cursor.Position.Y));
于 2013-04-05T19:26:41.533 に答える
2

私も同じ問題を抱えていました。この動作は初回のみ発生するため、これもバグであると考えています。そのため、ユーザーが操作する前に、強制的に開いてから閉じます。したがって、実際には、ユーザーが使用する前に一度使用すると、正しく動作します。フォーム ロード メソッドに追加したコードを次に示します。私のコンボボックスは、ユーザーがプリンターのリストから選択できるようにするために使用されます。

        printerToolStripMenuItem.ShowDropDown();
        toolStripComboBoxPrinter.Owner.Hide();
        printerToolStripMenuItem.Owner.Hide();
于 2015-05-22T21:15:34.573 に答える