0

DataGridView から継承するユーザー コントロールを使用して C# (.NET 3.5) アプリを作成しています。ユーザーが列ヘッダーを右クリックしたときに、コンテキスト メニューを表示したい。

私は実際に、アプリの2つのフォームでこの作業を見つけました。ContextMenu が 3 番目のフォームの同じコントロールに表示されないため、困惑しています。Popup イベントが発生することはわかりますが、メニューが画面に描画されていることはわかりません。また、メニュー項目のイベント ハンドラも呼び出されていません。

コンテキスト メニューが表示されない理由がまったくわかりません。

残念ながら、私のコードは複雑すぎてここにすべてを掲載することはできません...メニューを作成して表示する短いセクションを含めます。問題がこのコードにあるとは確信していませんが、他のどこにあるのかわかりません。

if (hti.RowIndex == -1)
{
    ClickedColumnHeader = this.Columns[hti.ColumnIndex];

    //Build a context menu and show it.
    ContextMenu mnu = new ContextMenu();
    mnu.MenuItems.Clear();
    MenuItem mnuHide = new MenuItem("Hide");
    mnuHide.Click += new EventHandler(mnuHide_Click);
    MenuItem mnuRename = new MenuItem("Rename...");
    mnuRename.Click += new EventHandler(mnuRename_Click);
    MenuItem mnuCurrencyFormat = new MenuItem("Format as Currency");
    mnuCurrencyFormat.Checked = false;

    if (this.Columns[hti.ColumnIndex].DefaultCellStyle.Format == "c")
    {
        mnuCurrencyFormat.Checked = true;
    }
    mnuCurrencyFormat.Click += new EventHandler(mnuCurrencyFormat_Click);
    MenuItem mnuSeparator = new MenuItem("-");
    MenuItem mnuShow = new MenuItem("Show");

    foreach (DataGridViewColumn col in this.Columns)
    {
        if (col.Visible == false)
        {
            MenuItem x = new MenuItem(col.HeaderText);
            x.Click += new EventHandler(x_Click);
            mnuShow.MenuItems.Add(x);
        }
    }

    mnu.MenuItems.Add(mnuHide);
    mnu.MenuItems.Add(mnuRename);
    mnu.MenuItems.Add(mnuCurrencyFormat);
    mnu.MenuItems.Add(mnuSeparator);
    mnu.MenuItems.Add(mnuShow);

    //for debugging...
    mnu.Popup += new EventHandler(mnu_Popup);
    mnu.Collapse += new EventHandler(mnu_Collapse);

    mnu.Show(this, new System.Drawing.Point(f.X, f.Y));
}

コミュニティが提供できる支援を本当に感謝しています。ここでばかげたことをしているだけだと本当に思っています。

4

1 に答える 1

0

はい、問題を再現するのに十分な情報ではありませんが、これを提供してもよろしいですか。他の2つのフォームで機能している場合、問題は継承されたコードにはありません。問題は第3形態。

どうしても時間がかかる場合は、最初から 4 番目を作成して、同じエラーが発生するかどうかを確認してください。すべてのイベント ハンドラーを確認します。フォーム1と2には配線されていますが、3には配線されていないようです。

于 2009-08-17T17:57:20.787 に答える