我最近在使用继承的UserControls时在VS2010SP1的Windows窗体设计器中出现错误.
错误是
无法为此文件显示设计器,因为其中的所有类都无法设计.设计人员检查了文件中的以下类:DebugPanel ---无法加载基类"UI.Panels.PanelBase".确保已引用程序集并且已构建所有项目.
PanelBase是一个UserControl,它在与DebugPanel相同的类库中定义,它也实现了一个接口IPanel(在同一个类库中定义).IPanel实现了一个在不同类库中定义的接口IBaseItem.
所以我们有
DebugPanel (Library UI.Shared2)
- PanelBase (Library UI.Shared2)
- UserControl (System.Windows.Forms - .NET4)
- IPanel (Library UI.Shared2)
- IBaseItem (Library Net.Common)
Run Code Online (Sandbox Code Playgroud)
PanelBase可以正确设计,项目都可以正确构建并且可以工作但是当我尝试设计任何继承的控件时,设计器会失败.这不仅限于DebugPanel控件,而是继承自PanelBase的任何控件......我也看到了我使用的具有类似继承层次结构的其他控件的问题.
我通常可以通过清理库UI.Shared2,关闭VS然后再次打开它,重建解决方案并打开设计器来临时解决问题.然后这将工作一段时间,然后再次开始失败.
有没有人有任何建议可以永久解决这个问题,而无需重新启动VS?
编辑:我的目标是所有库的完整版.NET 4.
我有一个新项目.我删除了一个文本框控件.我打开属性窗口,我可以更改高度并点击输入或单击开箱即可更新设计器,但当我尝试更改高度时,它会重置为默认值.这是为什么?我对Label有同样的问题,但我关闭了AutoSize,它允许我修改值.我可以关闭一些属性来修改设计视图中文本框的高度吗?我正在使用Visual Studio 2010 sp1.我在Visual Studio 2008中遇到了同样的问题.我是Windows窗体的新手.
我想创建一个用户输入数字的应用程序,程序将向用户返回一个字符.
编辑:如何反过来,将ascii字符更改为数字?
视觉工作室最受喜爱和讨厌的人之一必须是表单设计师.
创建简单的表单/用户控件布局通常是轻而易举的.设置属性和添加事件很容易.
设置工具箱以使用您自己的控件可能会有点困难,让ToolBoxIcons显示可能会很痛苦.通过可视继承使用第三方组件可以抛出设计者.在设计上使用多重继承可能非常困难.
那么你最喜欢的"隐藏"和/或明显的视觉工作室设计师功能是什么.
我有一个有点复杂的UserControl,Visual Studio 2008在使用它时给了我一个相当无害的烦恼.每次我使用Designer打开控件时,它都会决定立即更改设计器设置的一些无害值 - 即Size属性的初始化.如果我保存这些更改,关闭并重新打开,它几乎总是最终决定我的控件的另一个组件需要更改初始大小,无限制.幸运的是,这些变化是无害的,因为我在任何地方都使用自动调整大小,但这对于使用来说非常烦人.我不知道从何处开始弄清楚出了什么问题,我现在唯一想到的是Designer每次打开控件时都会将自动调整大小的结果分配回初始大小字段.关于原因/修复的任何想法?
编辑:此外,我正在使用应用程序设置来保存应用程序运行中某些可调整大小的子组件的大小,但我真的希望Designer足够聪明,以了解它应该只使用默认值.
c# user-controls visual-studio-2008 windows-forms-designer winforms
我有一个WinForms应用程序与此主窗体:
ICountRepository countRepository;
public MainForm(ICountRepository countRepository)
{
this.countRepository = countRepository;
}
public void IncrementCount()
{
countRepository.IncrementCount();
}
Run Code Online (Sandbox Code Playgroud)
但我正在努力注入ICountRepository主体.我怎么做 ?
我想使用Web浏览器访问在加载时使用JavaScript的网站.据我所知,Web浏览器是当前安装的Internet Explorer版本的包装器.但是,在Internet Explorer上测试网站不会产生错误,但如果我使用Web浏览器访问内容则不起作用.
我还查看了我的互联网安全设置,以确保它已启用.
我得到的问题是;

我编写了一个观察Windows.Forms设计器窗口的Visual Studio 2013扩展.当开发人员在设计器窗口中更改控件时,扩展会尝试验证结果是否与我们的ui样式指南一致.如果发现可能的违规,它们将列在工具窗口中.一切正常.但是现在我想在设计器窗口中标记不一致的控件,例如使用红框或类似的东西.
不幸的是,我没有找到在设计器窗口中绘制控件装饰的方法.我知道如果你开发自己的装饰品,你可以画出那些装饰品ControlDesigner,但我需要从控制设计师的"外部"开始.我只有IDesignerHost来自Dte2.ActiveWindow并且可以通过该主机访问Controls和ControlDesigners.我找不到任何方法来从ControlDesigners的"外部"添加装饰品.我现在的解决方法是捕获控件的Paint-Events并尝试从那里绘制我的装饰品.这对于所有控件(即ComboBox等)都不适用,因为并非所有控件都允许您使用它们.所以我不得不使用他们的父控件的Paint事件.此解决方案还有其他缺点.
我希望有人可以告诉我是否有更好的方法.我敢肯定,必须有一个:如果您使用菜单 - >查看 - > Tab键顺序(不知道正确的英文菜单标题,我使用的是德国IDE),您可以看到IDE本身能够装饰控件(没有截图,因为它是我在SO上的第一篇文章),我确信它不会像我一样使用解决方法.它是如何做到的?
我几周来一直在谷歌上搜索.感谢您的帮助,建议,研究起点......
更新:
也许这个截图有点清晰:
从View菜单中选择Tab顺序时,Visual Studio显示的是蓝色编号的插入符号.我的问题是如何通过IDE完成这项工作.
如上所述,我试图Paint在控件的情况下执行此操作,但例如ComboBox实际上不支持该事件.如果我使用父项的Paint事件,我只能在子控件周围绘制,因为它们是在父项之后绘制的.
我还想过在控件或ControlDesigners 上使用反射,但我不确定如何挂钩受保护的OnPaintAdornments方法.我不认为IDE开发人员使用那些"肮脏"的技巧.
我的工作室最近从SourceSafe切换到Subversion,让我们从自动锁中解脱出来.这导致了对Forms的并发编辑,这很精彩.但是当多个开发人员提交更改时,设计人员创建的代码文件(所有命名的文件TheFormName.designer.cs)都会导致很难解决的冲突.
据我所知,这是因为设计师生成的代码会在用户修改时重新安排,无论实际更改有多少.
我不确定这是一个错误还是我只是遗漏了一些东西,但我不能为我的生活弄清楚如何将光标放回到Visual Studio 2010中的Windows窗体设计器中.
我打开了一个现有的项目,并添加了一个组框,现在我的光标卡在了绘图组框中.我只想要简单的指针光标,但我没做什么似乎把它带回来.
我几乎预计它会出现在"光标"下的工具箱上,但事实并非如此.