Я на самом деле немного запутался здесь, я создал dll с пользовательским элементом управления на основе Label с AutoSize, установленным как true.Я с радостью использовал его, но дизайнер создал элемент управления с AutoSize, все еще установленным в true.
Я изменил dll, пытаясь заставить дизайнера показать мой элемент управления с AutoSize, установленным в false, и в результате получил исключение вконструктор.
Я отменил последнее изменение, но все еще получил исключение!
Я не смог продвинуться, пока не создал новый проект с нуля, удалив все ссылки на dll.
Я действительно не знаю, что там произошло.
Вот что я думал, что происходило:
DLL создается в своем собственном проекте (и решении тоже), который я добавилна панель инструментов и используется в конструкторе в другом проекте.
Содержит пользовательский элемент управления на основе System::Windows::Forms::Label
с AutoSize
всегда ложным.(Я знаю, что это очень просто, но я собираюсь расширить его, когда узнаю, что я делаю!)
Для метки, добавленной в форму, не установлено значение AutoSize
, равное false, что я и хочу,Я просто хочу, чтобы представление конструктора отражало поведение во время выполнения.
Когда я добавил атрибут [DesignerSerializationVisibility(DesignerSerializationVisibility::Content)]
, в конструкторе выдается исключение
[Я не уверен, что этона самом деле проблема в том, что уничтожение не решило меня]
Вывод
at VSLangProj.Reference.get_Path()
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.get_FileName()
at Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.GetMatchIndex(String typeName)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchNormalEntries(AssemblyName assemblyName, String typeName, Boolean ignoreTypeCase, Assembly& assembly, Boolean fastSearch)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.SearchEntries(AssemblyName assemblyName, String typeName, Boolean ignoreCase, Assembly& assembly, ReferenceType refType)
at Microsoft.VisualStudio.Design.VSTypeResolutionService.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, ReferenceType refType)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name, Boolean throwOnError, Boolean ignoreCase)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.AggregateTypeResolutionService.GetType(String name)
at System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IDesignerHost.GetType(String typeName)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)
Код
#pragma once
#using <System.DLL>
#using <System.Drawing.DLL>
#using <System.Windows.Forms.DLL>
namespace EasyButtons {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
public ref class ResizeLabel : public System::Windows::Forms::Label
{
public: ResizeLabel(void) {
this->AutoSize = false;
}
public:
virtual property bool AutoSize
{
[DesignerSerializationVisibility(DesignerSerializationVisibility::Content)]
bool get() override
{
return false;
}
void set(bool x) override
{
this->AutoSize = false;
}
}
// ...
}