【问题标题】:Prevent Visual Studio load a custom partial class as a designer阻止 Visual Studio 作为设计器加载自定义分部类
【发布时间】:2017-03-10 19:52:38
【问题描述】:

在 Visual Studio 中,有很多设计器编辑器、Windows 窗体、XAML、安装程序等。

有时,我会创建一个新的源代码作为部分类(自定义)来分离逻辑。

例如:

  • 仅部分代码:Form1 类:Windows.Forms.Form → Form1.cs
  • 仅限部分设计器:部分类 Form1:Form → Form1.Designer.cs
  • 部分类(自定义):部分类 form1:Form → Form.Print.cs

最后,我只包含打印方法和属性,然后,当我在解决方案资源管理器上双击此文件时,总是打开设计器,而不是代码编辑器,当然,我尝试使用 F7 kbd> 或右键单击执行此操作,但是当我与同事共享项目时,它会成为问题。

有人知道如何避免这种行为吗?也许是一个类属性!?

【问题讨论】:

  • @grant winey 感谢您的提示,我可以在 VS 中更改此选项,对我来说,但对其他人......我不知道,还有另一个 link 可能有用。我正在寻找类级别的配置。
  • 我认为这就是答案。 Disable designer in Visual Studio 但是,这会禁用整个类,而不仅仅是单独源代码中的部分自定义类,正如我所要求的那样。这是 MSDN 链接DesignerCategoryAttribute Class

标签: c# .net winforms visual-studio windows-forms-designer


【解决方案1】:

提供了 C# 和 VB.Net 代码,因为这仍然是一个问题。

基于接受的答案,https://stackoverflow.com/a/40302216/3917091

在自己的文件(或任何地方)中实现您的类

C#:

/// <summary>
/// Partial classes of Forms want to open in Form-View. Adding this stops it.
/// </summary>
[System.ComponentModel.DesignerCategory("")]
public class FormViewBlocker {
}

VB.net:

''' <summary>
''' Partial classes of Forms want to open in Form-View. Adding this stops it.
''' </summary>
<System.ComponentModel.DesignerCategory("")>
Public Class FormViewBlocker

End Class

然后,在部分形式的顶部,

C#:

partial class FormViewBlocker {
}

VB.net:

Partial Class FormViewBlocker

End Class

原来如此

【讨论】:

    【解决方案2】:

    另一种方法是嵌套文件并为其添加 .designer.cs 扩展名:

    这样做:

    1. 卸载项目

    2. 编辑项目文件

    3. 找到你想要的文件名

    4. &lt;DependentUpon&gt;name of parent&lt;/DependentUpon&gt;文件添加到子标签

      你现在应该有这样的东西:

      <Compile Include="Form1.cs">
        <SubType>Form</SubType>
      </Compile>
      <Compile Include="Form1.Designer.cs">
        <DependentUpon>Form1.cs</DependentUpon>
      </Compile>
      <Compile Include="Form1.Methods.Designer.cs" >
        <DependentUpon>Form1.cs</DependentUpon>
      </Compile>
      
    5. 保存并关闭项目文件。

    6. 重新加载项目。

    【讨论】:

      【解决方案3】:

      作为一个选项,在文件开头添加一个由[DesignerCategory("")] 修饰的虚拟类。这将DesignerCategory 的行为限制为设计器尝试加载的第一个类。

      不优雅但工作:

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      
      namespace WindowsFormsApplication1
      {
          [System.ComponentModel.DesignerCategory("")]
          public class Dummy { }
      
          public partial class Form1
          {
          }
      }
      

      【讨论】:

      • 不客气 :)。当您的Form 不是文件中的第一个类时,当您尝试在设计器中打开文件时,您会收到此错误:Form1 类可以设计,但不是文件中的第一个类。 Visual Studio 要求设计人员使用文件中的第一个类。移动类代码,使其成为文件中的第一个类,然后尝试再次加载设计器。 所以我使用了设计器尝试加载第一个类并用该属性装饰它以将其显示为代码的事实.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      相关资源
      最近更新 更多