我实际上有点困惑,我已经使用基于Label的自定义控件构建了一个dll,并将AutoSize固定为true。我很高兴地使用它,但设计师使用AutoSize创建的控件仍然设置为true。
我更改了dll,试图让设计师在AutoSize设置为false的情况下显示我的控件,最后在设计器中抛出异常。
我解除了最后一次更改,但仍然有例外!
直到我从头开始创建一个新项目,删除了对dll的所有引用,我才能继续前进。
我真的不知道那里发生了什么。
以下是我的想法:
dll是在它自己的项目(也是解决方案)中创建的,我已将其添加到工具箱中,并在设计器中用于不同的项目中。
它包含基于System::Windows::Forms::Label
的自定义控件,AutoSize
始终为false。 (我知道这很简单,但是当我知道自己在做什么时,我打算扩展它!)
表单上添加的标签没有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;
}
}
// ...
}
答案 0 :(得分:1)
void set(bool x) override
{
this->AutoSize = false;
}
这是一个错误,你再次打电话给二传手。只要将控件放在表单上,这将使设计器崩溃。修正:
void set(bool x) override
{
__super::AutoSize = false;
}
您还必须在属性上应用该属性,而不是getter。