gpt4 book ai didi

c# - 我可以让一个继承自 System.Windows.Forms.Form 类的类始终在代码 View 中打开吗?

转载 作者:行者123 更新时间:2023-11-30 22:14:55 24 4
gpt4 key购买 nike

我正在处理 Windows 窗体项目。其中我需要一个继承System.Windows.Forms.Form的类,我将其命名为FormBase.cs并继承System.Windows.Forms.Form类。但是在解决方案资源管理器中,FormBase.cs 得到了类似于 Windows 窗体的 View 。现在,当我尝试从解决方案资源管理器中打开文件时,它会在设计模式下打开。因为它很简单 class 我希望它必须在代码 View 而不是设计 View 中打开。为什么会这样?如果我希望 FormBase.cs 始终在代码 View 中打开并在解决方案资源管理器中重新获得其类 View ,我应该怎么做?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;
}
}

最佳答案

你可以使用 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 派生的每个表单,以未使用的类为代价。

关于c# - 我可以让一个继承自 System.Windows.Forms.Form 类的类始终在代码 View 中打开吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18266910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com