Visual Studio winforms设计器的隐藏功能

19

Visual Studio中最受欢迎和讨厌的功能之一必须是表单设计器。

创建简单的表单/用户控件布局通常很容易。设置属性和添加事件也很简单。

设置工具箱以使用您自己的控件可能有点困难,让工具箱图标显示出来可能会很麻烦。使用Visual Inheritance添加第三方组件可能会影响设计器的正常工作。同时,在设计器上使用多重继承也可能非常困难。

那么,您喜欢的“隐藏”和明显的Visual Studio设计器功能是什么呢?


完全同意关于ToolBoxBitmap的观点 - 即使尝试了十几种不同的“解决方案”,我也从未让它正常工作。开始认为这是一个神话... - Bradley Smith
关于那个toolboxbitmap。只有在正确设置并且DLL引用设置为单独的DLL而不是在同一个解决方案中时才有效。 - CodingBarfield
7个回答

25
  • 按住CTRL并拖动控件即可复制它。

注意:如果您的控件有设计师创建的事件处理程序,那么您新创建的控件将与旧控件一样与事件处理程序关联。

  • 使用键盘快捷键F7可以从设计器视图切换到代码视图,Shift-F7可以从代码视图切换到设计器视图。我经常使用这个技巧。

  • "文档大纲"窗口对于频繁使用设计器的人来说非常重要。这使您可以在大纲中重新排列控件,将其置于前面或后面。当您使用停靠控件时,这尤其有用。您还可以将子控件移动到不同的父级,或者将其从容器控件中取出,或者将父级移入容器等等...

查看 -> 其他窗口 -> 文档大纲

  • "布局"工具栏非常适用于对齐控件以创建整洁漂亮的用户界面。

查看 -> 工具栏 -> 布局


5
Shift F7键可以在代码视图和设计视图之间切换。 - CodingBarfield
2
“文档大纲”正是我在谷歌网页上找不到的、非常符合我需求的内容。” - orfdorf

9

当WinForms项目设计器在窗体或用户控件上打开且存在嵌套的子控件时,按下Escape键可以将焦点从当前聚焦的子控件转移到其父控件。再次按Esc键将焦点移动到其父级,以此类推,直至最终达到顶级。


5

您可以向用户控件添加自己的捕捉线。

下面这个类叫做CenterSquare,它有一个名为CenterSquareSnapLines的设计器,提供了控件内部的捕捉线列表。如果您拥有渲染边框比较小的自定义控件,现在可以添加自己的捕捉线。

public class CenterSquareSnapLines : ControlDesigner
{

    public override System.Collections.IList SnapLines
    {
        get
        {
            ArrayList snapLines = base.SnapLines as ArrayList;
            CenterSquare c = this.Control as CenterSquare;
            if (c != null)
            {
                snapLines.Add(new SnapLine(SnapLineType.Left, c.BorderDistance));
                snapLines.Add(new SnapLine(SnapLineType.Right, c.Height - c.BorderDistance));
                snapLines.Add(new SnapLine(SnapLineType.Top, c.BorderDistance));
                snapLines.Add(new SnapLine(SnapLineType.Bottom, c.Width - c.BorderDistance));
                snapLines.Add(new SnapLine(SnapLineType.Top, 5));
            }
            else
            {
                //Debug message here!
            }
            return snapLines;
        }
    }

}

[Designer(typeof(CenterSquareSnapLines))]
public partial class CenterSquare : UserControl
{
 //implementation goes here
}

另外请看: https://dev59.com/S3VD5IYBdhLWcg3wGHeu#945486 - Matthew M.

5

你知道吗,你实际上可以调试设计师吗?

你可以启动两个解决方案,并使用“附加到进程”来调试运行你的设计师控件的devenv环境。这对于调试“奇怪”的设计师问题特别有帮助,否则很难获得很少的信息。

我使用这个方法将一个设计师问题定位到一些远程操作上,该操作未能正常工作,触发了未处理的异常并破坏了设计师。在desigerview上,我只看到一些Visual Studio内部辅助类崩溃。


4

我尝试在表单初始化时编写自己的事件处理程序方法,而不是让设计器来处理。我发现设计器有时会丢失这些事件。通过编写自己的代码,您可以确保事件始终生效。

myButton.Click += new System.EventHandler(this.myButtonClick)

1
在较新的.NET版本中,我的代码可以缩短为:myButton.Click += this.myButtonClick。 - pettys

2

用户控件上的所有属性都将由设计师显示,并填充默认的数据类型值。 添加DesignerSerializationVisibility属性,值为Hidden,将不会填充此属性的任何默认值。

<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>

这是将设计师代码量保持在最低的好方法。另一个选择是DefaultValue。

<DefaultValue(somevalue)>

这将设置设计师使用给定的值作为选择的默认值。

如果您不使用这些属性,设计师将覆盖后备字段值和初始化程序值。

另一个可能很难找到的选项是:菜单-查看-选项卡顺序。

您可以通过单击字段来更改选项卡顺序。此选项仅在设计师处于活动状态时可见。


另一个提示是设置<Browsable(false)>。 - CodingBarfield

1

设计师出问题:

有时候Visual Studio不会显示切换到设计/代码选项。我还没有确定是什么原因导致的,但在使用DevExpress时混合vb.net和c#项目似乎是一个原因。

只要Visual Studio运行,它就不会突然发现我的表单/用户控件可以进行设计。关闭Visual Studio并更改项目文件通常会有所帮助。

最初的项目文件包含了

<Compile Include="cboTargetGroupFlights.cs">

将其更改并重新打开项目会导致 Visual Studio 重新检查所有表单/用户控件,并再次显示设计器。

<Compile Include="cboTargetGroupFlights.cs">
  <SubType>Component</SubType>
</Compile>

你知道吗?在解决方案视图中双击某个文件后,你可以将代码视图设置为默认视图。右键单击文件,选择“使用...打开”,然后使用“设置为默认”按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接