我正在将SourceForge上的TreeVIEwAdv(TVA)项目转换为vb.net.到目前为止,我已成功转换代码,成功构建它,将dll的引用添加到新项目,将控件添加到工具箱,将控件添加到窗体,以及修改控件属性.在构建接受Aga.Controls命名空间之前,我还在表单中编写了功能.
问题
当我去调试我放置了TVA控件的应用程序时,我得到错误:”Aga’没有声明.由于其保护级别,它可能无法访问.对该命名空间的所有调用.所以,我在SourceForge上研究了这个问题,这里有一个帖子:https://sourceforge.net/p/treeviewadv/discussion/568369/thread/005e61ef/讨论了这个问题.据说当你看到这样的行为时,有人会弄清楚问题是什么,但未能分享他们智慧的任何细节.一般的问题是,当引用2008年在2010年项目中编译的dll时,VS 2010要求设计师与主程序集分开.我试着联系那里的人,但在论坛中的任何线程似乎都没有真正的活动.这引出了我的第一个问题……
问题
1.)希望超越希望,StackOverflow上是否有人专门为treevIEwadv项目成功完成了这项工作?如果是这样,我将非常感谢对所做的事情的详细描述,或对最终结果代码/修复的简短描述.虽然我明白这是不太可能的,但我想在询问关于“如何”的更多一般性问题之前我会问?
2.)除非符合第1号法案的任何人,是否有任何人了解这一一般过程,并且至少对TVA项目有足够的了解并希望与我合作进行这项工作?
2.)禁止1和2,有没有人在任何项目中完成此任务,并且可以相对详细地描述一般过程,和/或指向示例代码?
3.)除了1,2和3之外,是否有一个特别好的资源可以访问,概述了如何以上述方式更新VS2008项目?
放弃
我知道这个过程可能过于复杂,无法在此讨论,所以如果需要,我愿意在其他地方进行讨论/努力.如果第1类或第2类的人可以(回答我的问题/与我一起工作)并且您认为应该在其他地方进行讨论,请告知我们我们如何能够相互联系,因为似乎没有正式的SO机制.我仍然有兴趣在这里发布(或链接)结果,如果可以找到答案,所有人都可以分享.
解决方法 这里有一些信息可以解决不同程序集中Designer的一般问题.有一些警告:首先我(我们?)不确定与UI Designer有关的核心问题.鉴于该项目似乎是一个自定义的TreeVIEw,似乎可能是这种情况,但术语“Designer”可以更通用的方式用于此控件.第二个警告是,我必须继续的是上面的描述,并没有看到控件的代码.也就是说,我刚刚完成UnDo Manager组件的下降(即它继承自Component并位于表单托盘中).它需要的部分原因是开发人员可以选择表单上的控件来接受UnDo.布局/构造是这样的:
imports Plutonix.UIDesignersnamespace Plutonix.UnDoMgrPublic Class UndoManager inherits Component Implements ISupportinitialize Private _TgtControls As New Collection(Of Control) <EditorAttribute(GetType(UnDoControlCollectionUIEditor),_ GetType(System.Drawing.Design.UITypeEditor))> _ <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _ Public Property UnDoTargets() As Collection(Of Control) Get Return _TgtControls End Get Set(ByVal value As Collection(Of Control)) If value IsNot nothing Then _TgtControls = value Else _TgtControls.Clear() End If End Set End Property '...
< EditorAttribute ... decoration指定此组件使用名为UnDoControlCollectionUIEditor的特殊设计器.如果要转换的项目在一个或多个属性上没有此项,则该问题可能与UI设计者无关. 之后,还有用于COntrols集合编辑器的UI编辑器.这是一个单独的类,虽然它在同一个文件中:
<System.Security.Permissions.PermissionSetAttribute( _ System.Security.Permissions.SecurityAction.Demand,name:="FullTrust")> _Public Class UnDoControlCollectionUIEditor inherits ControlCollectionUIEditor Public Sub New() MyBase.bExcludeForm = True MyBase.bExcludeSelf = True ' create a List of supported control TYPES typeList.Add(GetType(TextBox)) '... 9 more lines adding control types to List(of System.Type) End Sub End Class
几乎所有代码都驻留在基类ControlCollectionUIEditor中,该基类位于不同的程序集(DLL)中.我的组件实际上是使用本地定义的,因此作为测试,我将编辑器更改为使用ControlCollectionUIEditor,它是我的设计器DLL中的基类.标签,面板,GroupBox等没有/需要UnDo功能,因此我的设计师不会在Designer中显示它们 – 当我使用基类时,它们都会按预期显示在设计器列表中.
所有标准UI编辑器(字符串集合编辑器等)都在.NET程序集中,因此在一个程序集中定义并在另一个程序集中使用(您的/我们/开发人员).几年前,我决定将我编写的几个不同的UIDesigner放入UIDesigner.DLL(即他们自己的程序集)中,并且它们工作正常.
除此之外,我对某些细节感到困惑.听起来你正试图在你的转换中使用这个2008程序集(一个DLL?).那是设计师的所在吗?如果是这样,它已经在你的VS 2010项目的另一个程序集中了,那么为什么会出现问题呢?通过转换2008年装配中的任何东西(仍然不清楚其中的内容),可以避免整个事情.
HTH
编辑
我快速浏览了一下源代码,它至少使用了1个UIDesigner. TreeVIEwAdv.PropertIEs.cs将NodeControlCollectionEditor定义为NodeControls属性的自定义控件集合编辑器.编辑器位于NodeControlsCollection.cs中.巧合的是,它正在做我的UnDoManager所做的事情:定义哪些控件类型对于CollectionEditor有效.然后你的东西调用标准的.NET CollectionEditor,我调用CodeProject DialogForm版本.还有一个StringCollectionEditor.cs文件,但是我不知道这是UI Designer还是用户在运行时的东西.
由于你有这些代码,你应该能够模仿我上面所做的事情.我还要验证VS 2010确实有提到的怪癖.但我也对2008年大会的内容感到困惑.是否有一些你没有来源的作品?您也可以尝试将安全属性添加到项目中的任何UI设计器,因为CS版本没有它们,并且引用的msg指示有关“保护级别”的信息.这似乎不太可能有所帮助,但既然你正在处理一个怪癖,谁知道……?
此外,这是一个非常雄心勃勃的转换项目!
总结以上是内存溢出为你收集整理的c# – 将设计师与主装配分开全部内容,希望文章能够帮你解决c# – 将设计师与主装配分开所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)