1

要するに、私の問題は「送信先」を実装する方法です(Windowsでファイルを右クリック)

ログ ファイル名の列も含むデータ グリッド ビューがあります (各ファイルのパスはわかっています)。

ポップアップ メニューに [Copy options to Desktop and Disk on Key (removable) drivers] を追加したいと考えています。

ポップアップ メニューは次のようになります。

   View log

   Open file location

   <---------------->

   Copy to -->  Desktop
                (and Removable Drivers)

   ...

だから私は欲しい:

  1. 「コピー先」サブメニューの下に「デスクトップ」とすべてのリムーバブルドライバーのリストを追加する(およびユーザーが取り出したリムーバブルドライバーを削除する)

  2. ファイルをリムーバブルドライバーにコピーしたいので、「動的イベント」を追加するにはどうすればよいですか-つまり、ユーザーが4つのDisk On Keyドライバーをプラグインすると、「コピー先」サブメニューの下に新しい4行が表示されます(たとえば、デスクトップと E:\、F:\、G:\、L:)、つまり、ファイルを真のドライバーにコピーするには、リムーバブル ドライバーごとに新しいクリック イベントが必要です...

質問 1 について - リムーバブル ドライバーがコンピューターに接続されているかどうかを検出するコードを見つけ、サブ メニューにリムーバブル ドライバーを追加することに成功しました。しかし、サブメニューから項目を削除できませんでした:

private void menu_PopUp_Opening(object sender, CancelEventArgs e)
{
    // Need to remove all removable drivers first --> How to do ?

    // to update the USB drivers when opening new pop up menu
    DriveInfo[] ListDrives = DriveInfo.GetDrives();
    foreach (DriveInfo Drive in ListDrives)
    {
        if (Drive.DriveType == DriveType.Removable)
        {
            // add to popup menu, from: http://stackoverflow.com/questions/5868446/how-to-add-sub-menu-items-in-contextmenustrip-using-c4-0
            (menu_PopUp.Items[3] as ToolStripMenuItem).DropDownItems.Add(Drive.Name + " (" + Drive.VolumeLabel + ")");
        }
    }
}

助けてくれてありがとう!

4

2 に答える 2

2

一番上の「デスクトップ」以外のすべてのメニューサブアイテムを明示的に削除しないのはなぜですか。

  ...
  // Need to remove all removable drivers first
  ToolStripMenuItem copyToItem = menu_PopUp.Items[3] as ToolStripMenuItem;

  // Assuming that "Desktop" menu item is the top one, 
  // we should delete all the items except #0 
  for (int i = copyToItem.DropDownItems.Count - 1; i >= 1; --i)
    copyToItem.DropDownItems.RemoveAt(i);

  ...
  // to update the USB drivers when opening new pop up menu
  DriveInfo[] ListDrives = DriveInfo.GetDrives();

  foreach (DriveInfo Drive in ListDrives) {
    if (Drive.DriveType == DriveType.Removable) {
      // add to popup menu, from: http://stackoverflow.com/questions/5868446/how-to-add-sub-menu-items-in-contextmenustrip-using-c4-0
      ToolStripItem item = (menu_PopUp.Items[3] as ToolStripMenuItem).DropDownItems.Add(Drive.Name + " (" + Drive.VolumeLabel + ")");

      item.Tag = Drive.Name; // <- bind (via tag) driver name with menu item
      item.Click += OnRemovableDriveClick;
    }
  }

...

  private void OnRemovableDriveClick(object sender, EventArgs e) {
    ToolStripItem item = sender as ToolStripItem;

    String driveName = item.Tag as String;
    ...
于 2013-07-29T06:02:49.257 に答える
0
  1. 「コピー先」アイテムへの参照を取得する
  2. そのアイテムのアイテムをループする

    ToolStripMenuItem copyToItem = menuStrip.Item(...)

    foreach (copyToItem.Items 内の ToolStripMenuItem アイテム) { copyToItem.Items.Remove(item); }

于 2013-07-29T05:52:39.217 に答える