Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使继承自System.Windows.Forms.Form类的类始终在代码视图中打开?_C#_Winforms_Visual Studio - Fatal编程技术网

C# 是否可以使继承自System.Windows.Forms.Form类的类始终在代码视图中打开?

C# 是否可以使继承自System.Windows.Forms.Form类的类始终在代码视图中打开?,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我正在从事Windows窗体项目。在其中,我需要一个继承System.Windows.Forms.Form的类,我将其命名为FormBase.cs并继承System.Windows.Forms.Form类。但是在解决方案资源管理器FormBase.cs中获得了类似Windows窗体的视图。。现在,当我尝试从解决方案资源管理器中打开文件时,它将以设计模式打开。由于它是简单的类,我希望它必须在代码视图而不是设计视图中打开。为什么会这样?如果希望FormBase.cs始终在代码视图中打开并在解决方案资

我正在从事Windows窗体项目。在其中,我需要一个继承
System.Windows.Forms.Form
的类,我将其命名为
FormBase.cs
并继承
System.Windows.Forms.Form
类。但是在解决方案资源管理器
FormBase.cs
中获得了类似Windows窗体的视图。。现在,当我尝试从解决方案资源管理器中打开文件时,它将以设计模式打开。由于它是简单的
,我希望它必须在代码视图而不是设计视图中打开。为什么会这样?如果希望
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;
    }
}
公共类FormBase:System.Windows.Forms.Form
{
公共虚拟词典nonsavableReasions()
{
字典_nonsavebleReasions=新字典();
//MaskedTextBox.MaskedTextBox和MaskedTextBox.MyCombo是自定义组件
//分别为文本框和组合框类型
//还有两个属性名为“IsMandatory”和“LabelName”
foreach(此.Controls.OfType()中的MaskedTextBox.MaskedTextBox maskTextBox)
{
if(maskTextBox.IsMandatory&&string.IsNullOrEmpty(maskTextBox.Text)&&&!\u nonsavebleReasions.ContainsKey(maskTextBox.Name))
_添加(maskTextBox.Name,maskTextBox.LabelName+“是必需的”);
}
foreach(MaskedTextBox.MyCombo MyCombo在this.Controls.OfType()中)
{
if(myCombo.IsMandatory&&string.IsNullOrEmpty(myCombo.Text)&&&!\u nonsaveleReasions.ContainsKey(myCombo.Name))
{
如果(!\u nonsableReasions.ContainsKey(myCombo.Name))
_添加(myCombo.Name,myCombo.LabelName+“为必填项”);
}
}
返回-不可保存的原因;
}
公共字符串GetValidationStringMsg(字典非AvailResons)
{
return nonSavableResons!=null?String.Join(Environment.NewLine,nonSavableResons.Select(a=>a.Value).ToArray()):String.Empty;
}
}

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

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

方案A 步骤1。将属性应用于
FormBase
,指定
作为类别:

[System.ComponentModel.DesignerCategory("")]
public class FormBase : System.Windows.Forms.Form
[System.ComponentModel.DesignerCategory("Form")]
public partial class MainForm : FormBase
[System.ComponentModel.DesignerCategory("")]
internal class Unused
{
}

public class FormBase : System.Windows.Forms.Form
{
    // ...
}
步骤2。将该属性应用于从
表单库
派生的每个表单,并将
“表单”
指定为类别:

[System.ComponentModel.DesignerCategory("")]
public class FormBase : System.Windows.Forms.Form
[System.ComponentModel.DesignerCategory("Form")]
public partial class MainForm : FormBase
[System.ComponentModel.DesignerCategory("")]
internal class Unused
{
}

public class FormBase : System.Windows.Forms.Form
{
    // ...
}
请注意,必须使用属性的完全限定类型名。这不起作用:

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

[DesignerCategory("")]
public class FormBase : System.Windows.Forms.Form
方案B 在FormBase.cs中,在上面的中,添加一个虚拟类并对其应用属性,将
指定为类别:

[System.ComponentModel.DesignerCategory("")]
public class FormBase : System.Windows.Forms.Form
[System.ComponentModel.DesignerCategory("Form")]
public partial class MainForm : FormBase
[System.ComponentModel.DesignerCategory("")]
internal class Unused
{
}

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

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

这是因为表单用
DesignerAttribute
装饰。righclick->ViewCode打开csfile@SriramSakthivel我可以使用
DesignerAttribute
来打开代码视图中的
BaseForm.cs
吗?您希望VS能够读懂您的心思,并猜测此表单不是表单,即使它看起来与表单完全相同。这还不够聪明。@NicolasTyler如果这不可能,那么至少VS应该有一些工具来处理这个问题。。。。或阻止在设计模式下打开窗体的属性。这种行为也让我很烦,很好用。我发现
[System.ComponentModel.DesignerCategory(“”)
只需要添加
FormBase.cs
的上述类定义。谢谢你的回复。这是什么意思?您可以在代码视图(F7)中间接打开表单。。!