Не могу получить доступ к свойствам и событиям моего пользовательского элемента управления, унаследованного от ToolStripControlHost в конструкторе

Я пытаюсь создать пользовательский элемент ContextMenu, который состоит из просто FlowLayoutPanel, содержащего метку и ComboBox. Я хочу иметь возможность доступа к свойствам и событиям моего пользовательского элемента управления во время разработки в конструкторе Visual Studio 2013. Я хочу иметь возможность использовать свой пользовательский элемент управления в MenuStrip, в ToolStripMenuItem или в ContextMenu. Моя настоящая проблема заключается в том, что все работает нормально, если я вставляю элемент управления непосредственно в MenuStrip, но я не могу получить доступ к окну свойств своего элемента управления, когда оно находится в ToolStripMenuItem или в ContextMenu. Окно свойств полностью белое, а в конструкторе элемент управления сбой.

Итак, вот мой код (я еще не реализовал ни свойств, ни каких-либо событий, но я все равно должен иметь доступ к унаследованным свойствам и событиям в окне свойств. Фактически, я делаю, когда вставляю элемент управления в MenuStrip, но не в другой два.)

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace CustomControlLib
{
    [ToolStripItemDesignerAvailabilityAttribute(ToolStripItemDesignerAvailability.MenuStrip        | ToolStripItemDesignerAvailability.ToolStrip |    ToolStripItemDesignerAvailability.ContextMenuStrip)]
    public class LblCboxStripControl : ToolStripControlHost
    {
        private Label controlName;
        private ComboBox controlComboBox;
        private FlowLayoutPanel controlPanel;

        public LblCboxStripControl()
            : base(CreateControlInstance())
        {
            controlPanel = (FlowLayoutPanel)base.Control;
            controlPanel.AutoSize = true;
            controlPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink;
            controlPanel.BackColor = Color.Transparent;

            controlName = new Label();
            controlName.BackColor = Color.Transparent;
            controlName.AutoSize = true;
            controlName.Dock = DockStyle.None;
            controlName.Text = "Control name";

            controlComboBox = new ComboBox();

            controlPanel.Controls.Add(controlName);
            controlPanel.Controls.Add(controlComboBox);
        }

        public static FlowLayoutPanel CreateControlInstance()
        {
            FlowLayoutPanel flp = new FlowLayoutPanel();
            return flp;
        }
    }
}

Я видел похожий пост здесь: .NET Custom Control (ToolStripControlHost) наносит ущерб дизайнера

но единственное решение - создать класс, который наследует форму ToolStripControlHost и предоставляет конструктор без аргументов, вообще не решает мою проблему. Я также пытался создать новые пустые проекты, перезапустить VS и поместить класс в проект формы или в библиотеку extern, но это тоже не решило проблему. Я бы также добавил, что в файле Form.designer нет ничего необычного.

0 ответов

Другие вопросы по тегам