Не сгенерированный автоматически ContextMenu не будет отображаться - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь создать контекстное меню, которое сможет при необходимости добавлять дополнительные пункты меню с вложенным дочерним меню.

В моем нынешнем виде код не генерирует ошибок, и он будет проходить черезпрограмма, как и предполагалось, но на экране ничего не отображается.

Я подумал, что мне не хватает связи между ContextMenuStrip и компонентом, к которому он подключен, поэтому я посмотрел, как автоматически генерируется кодв режиме конструктора ... однако у меня нет доступа к объекту "Controls" для выполнения Control.Add(this.whatever), и он, по-видимому, не является частью коллекции using System....Я оставил свой тест для этого закомментированным ниже.

Методы SuspendLayout и ResumeLayout - это еще одна вещь, которую я изучил после прочтения, что вы должны вызывать их до и после внесения изменений в компоненты пользовательского интерфейса.Я не уверен, правильно ли я их использую, поскольку они, кажется, ничего не делают, я не уверен, когда они действительно должны быть использованы.

Буду признателен за указание на то, что я пропустил, спасибо:)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.IO;

namespace Context
{
class PopulateMenu
{
    private void PopulateSubMenu(string fileName, ContextMenuStrip parent, EventHandler onClickDelete, EventHandler onClickView)
    {
        try
        {
            Image delete = Properties.Resources.RO_Mx2_24_delete;
            Image view = Properties.Resources.OpenFolder1;

            parent.SuspendLayout();
            //Parent
            ToolStripMenuItem attachedFiles = new ToolStripMenuItem(fileName, Properties.Resources.NewDocumentHS);
            //Kids
            attachedFiles.DropDownItems.Add(new ToolStripMenuItem("View File", view, onClickView));

            //if (!hotfolder)
            //{
            attachedFiles.DropDownItems.Add(new ToolStripMenuItem("Delete File", delete, onClickDelete));
            //}
            //else
            //{
            //    attachedFiles.DropDownItems.Add(new ToolStripMenuItem("Remove File", delete, onClickDelete));
            //}

            // Attach kid to parent
            parent.Items.Add(attachedFiles);
            parent.ResumeLayout();
        }
        catch { Exception e; }
    }


    private void BuildHotMenu(List<FileInfo> files, ContextMenuStrip parent)
    {
        try
        {
            parent.SuspendLayout();
            parent.Items.Add(new ToolStripMenuItem("Hot Folder Files"));
            parent.Items.Add(new ToolStripSeparator());

            foreach (FileInfo fileInfo in files)
            {
                PopulateSubMenu(fileInfo.Name, parent, null, null);
            }
            parent.ResumeLayout();
        }
        catch { Exception e; }
    }

    private void BuildDropMenu(List<FileInfo> files, ContextMenuStrip parent)
    {
        try
        {
            parent.SuspendLayout();
            parent.Items.Add(new ToolStripMenuItem("Dropped Files"));
            parent.Items.Add(new ToolStripSeparator());

            foreach (FileInfo fileInfo in files)
            {
                PopulateSubMenu(fileInfo.Name, parent, null, null);
            }
            parent.ResumeLayout();
        }
        catch { Exception e; }
    }

    public void SummonContextMenu()
    {
        try
        {
            ContextMenuStrip attachedFilesWithMenu = new ContextMenuStrip();
            ////ContextMenu
            //attachedFilesWithMenu.Name = "attachFilesWithMenu";
            //attachedFilesWithMenu.Size = new Size(61, 4);

            //ToolStrip ToolStrip1 = new ToolStrip();
            ////ToolStrip
            //toolStrip1.ContextMenuStrip = attachedFilesWithMenu;
            //toolStrip1.Location = new Point(0, 0);
            //toolStrip1.Size = new Size(284, 25);
            //toolStrip1.Name = "toolStrip1";
            //toolStrip1.Text = "toolStrip1";

            //// Form2
            //// 
            //AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            //AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            //ClientSize = new System.Drawing.Size(284, 262);
            //Controls.Add(this.toolStrip1);
            //ResumeLayout(false);
            //PerformLayout();




            //static directory for testing only
            ConfigurationInformation configurationInformation = new ConfigurationInformation();
            configurationInformation.HotFolderPath = "C:\\Users\\alexh\\HotFolder\\";

            //Store DirectoryInfo
            DirectoryInfo dirInfo = new DirectoryInfo(Environment.ExpandEnvironmentVariables(configurationInformation.HotFolderPath));
            //Create list to store file details
            List<FileInfo> hotFiles = new List<FileInfo>();

            foreach (FileInfo fileInfo in dirInfo.GetFiles())
            {
                hotFiles.Add(fileInfo);
            }
            BuildHotMenu(hotFiles, attachedFilesWithMenu);
            BuildDropMenu(hotFiles, attachedFilesWithMenu);
        }
        catch { Exception e; }
    }

    public PopulateMenu()
    {
    }
    //private System.Windows.Forms.ToolStrip toolStrip1;
    //private System.Windows.Forms.ContextMenuStrip contextMenuStrip1;
}

}

1 Ответ

0 голосов
/ 19 июня 2012

Ну, это было довольно просто. Вы просто должны сделать это из формы.

//this.Literally = theAnswer;
this.ContextMenuStrip = myContextMenu;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...