Пользовательский контроль и приложение в одном проекте - PullRequest
3 голосов
/ 29 июля 2010

Я хочу создать пользовательский элемент управления в C #, который я буду использовать несколько раз в своем приложении, но вряд ли буду использовать в других приложениях. Я видел несколько веб-сайтов, которые объясняют, как создать собственный элемент управления и добавить его в панель инструментов Visual Studio. Они инструктируют вас создать проект с пользовательским элементом управления, который компилируется в DLL, затем создать новый проект для приложения и добавить ссылку на эту DLL в панели инструментов. Однако я бы предпочел, чтобы мое приложение было одним исполняемым файлом, не зависящим от DLL. Есть ли способ поместить пользовательский элемент управления и приложение в один проект, и при этом пользовательский элемент управления появляется в наборе инструментов Visual Studio? Или, если невозможно добавить элемент управления на панель инструментов, есть ли другой способ просмотреть элемент управления в конструкторе приложения?

1 Ответ

2 голосов
/ 29 июля 2010

Техника в:

  1. Для разработки вашего проекта вы можете использовать свой компонент как обычно (имеется в виду добавление его в виде DLL в набор инструментов и ссылку на него в вашем проекте).

  2. Чтобы использовать вашу dll для внутреннего использования в одном exe-файле, вы должны добавить его (необработанный или дефлированный) к ресурсам вашего проекта.

  3. В методе Main подпишитесь на событие AppDomain.AssemblyResolve:

    public static void Main( string[] args )
    {            
        AppDomain.CurrentDomain.AssemblyResolve += AppDomain_AssemblyResolve;    
    }
    
  4. В обработчике событий вы должны разрешить сборку с вашим компонентом:

    private static Assembly AppDomain_AssemblyResolve( object sender, ResolveEventArgs args )
        {
            if( args.Name.Contains( "YourComponent" ) )
            {           
                using( var resource = new MemoryStream( Resources.YourComponent ) )
                    return Assembly.Load( resource.GetBuffer() );
            }
    
            return null;
        }
    

Тогда ваше приложение будет использовать эту сборку, извлеченную из вашего exe-файла, но вы все равно сможете использовать компонент из набора инструментов при разработке.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...