2

私はWindowsフォームプロジェクトに取り組んでいます。を継承するクラスが1つ必要な場合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 がデザイナーで特定のファイルを開くのを防ぐことができます。この属性を適用する方法は 2 つあります。

オプション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 に答える