2

我正在处理 Windows 窗体项目。在其中我需要一个继承类System.Windows.Forms.Form,我将其命名为FormBase.cs继承System.Windows.Forms.Form类。但是在解决方案资源管理器中FormBase.cs获得了类似于 Windows 窗体的视图。现在,当我尝试从解决方案资源管理器中打开文件时,它会在设计模式下打开。由于它很简单class,我希望它必须在代码视图而不是设计视图中打开。为什么会发生?如果我想FormBase.cs始终在代码视图中打开并在解决方案资源管理器中重新获得其类视图,我该怎么办? FormBase.cs好像 :

public class FormBase : System.Windows.Forms.Form
{
    public virtual Dictionary<string, string> NonSaveableReasons()
    {
        Dictionary<string, string> _nonSavebleReasons = new Dictionary<string, string>();

        //MaskedTextBox.MaskedTextBox and MaskedTextBox.MyCombo are Custom Components
        //which are of type TextBox and ComboBox respectively
        //having 2 more properties name as "IsMandatory" and "LabelName"

        foreach (MaskedTextBox.MaskedTextBox maskTextBox in this.Controls.OfType<MaskedTextBox.MaskedTextBox>())
        {
            if (maskTextBox.IsMandatory && string.IsNullOrEmpty(maskTextBox.Text) && !_nonSavebleReasons.ContainsKey(maskTextBox.Name))
                _nonSavebleReasons.Add(maskTextBox.Name, maskTextBox.LabelName + " is mandatory.");
        }

        foreach (MaskedTextBox.MyCombo myCombo in this.Controls.OfType<MaskedTextBox.MyCombo>())
        {
            if (myCombo.IsMandatory && string.IsNullOrEmpty(myCombo.Text) && !_nonSavebleReasons.ContainsKey(myCombo.Name))
            {
                if (!_nonSavebleReasons.ContainsKey(myCombo.Name))
                    _nonSavebleReasons.Add(myCombo.Name, myCombo.LabelName + " is mandatory.");
            }
        }

        return _nonSavebleReasons;
    }

    public string GetValidationStringMsg(Dictionary<string, string> nonSavableResons)
    {
        return nonSavableResons != null ? String.Join(Environment.NewLine, nonSavableResons.Select(a => a.Value).ToArray()) : string.Empty;
    }
}
4

2 回答 2

3

您可以使用 System.ComponentModel.DesignerCategoryAttribute来防止 Visual Studio 在设计器中打开一个特定文件。有两种方法可以应用此属性。

选项 A

步骤 1.将属性应用于FormBase,指定""为类别:

[System.ComponentModel.DesignerCategory("")]
public class FormBase : System.Windows.Forms.Form

步骤 2.将属性应用于从 派生的每个表单FormBase,指定"Form"为类别:

[System.ComponentModel.DesignerCategory("Form")]
public partial class MainForm : FormBase

请注意,您必须使用属性的完全限定类型名称。这不起作用:

// BAD CODE - DON'T USE
using System.ComponentModel;

[DesignerCategory("")]
public class FormBase : System.Windows.Forms.Form

选项 B

在上面 的FormBase.cs 中FormBase,添加一个虚拟类并将属性应用到它,指定""为类别:

[System.ComponentModel.DesignerCategory("")]
internal class Unused
{
}

public class FormBase : System.Windows.Forms.Form
{
    // ...
}

使用这种方法,您不需要以FormBase未使用的类为代价将属性应用于派生自 的每个表单。

于 2013-08-17T00:44:11.487 回答
0

在解决方案资源管理器中,用右手单击表单,然后用左手按F7。该表单现在每次都在代码视图中打开。

于 2013-08-17T00:40:34.063 回答