0

初めて C3 をコーディングし、久しぶりに Visual Studio を使用していることに気づきました。

ファイル/フォルダーなどを選択できるユーザーコントロールを作成して、将来そのようなコントロールを簡単に実装できるようにしています。ただし、コントロールを任意のフォームにドラッグすると、Visual Studio が即座にクラッシュします。ソリューション全体を数回再構築しようとしました。エラーは、コントロールでパブリック変数を作成するときにのみ発生するようです...

これを回避する方法を知っている人はいますか?コードは進行中です.... ;)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BackupReport.tools
{
    public partial class pathchooser : UserControl
    {

        #region "Datatypes"
        public enum DLG { Folder, FileSave, FileOpen };
        #endregion

        #region "public properties"
        public DLG Dtype
        {
            get
            {
                return this.Dtype;
            }
            set
            {
                this.Dtype = value;
            }
        }

        public string labelText
        {
            get
            {
                return this.labelText;
            }
            set
            {
                this.labelText = value;
                label1.Text = this.labelText;
            }
        }
        #endregion

        #region "Constructor"
        public pathchooser()
        {
            InitializeComponent();
            this.Dtype = DLG.Folder;
            this.labelText = "Source:";
            label1.Text = this.labelText;
        }
        #endregion

        private void browse_button_Click(object sender, EventArgs e)
        {
            switch (this.Dtype)
            {
                case DLG.Folder:
                    if (fbd.ShowDialog() == DialogResult.OK)
                    {
                        path_textbox.Text = fbd.SelectedPath;
                    }
                    break;

                case DLG.FileSave:
                    break;

                case DLG.FileOpen:
                    break;

                default:
                    break;
            }
        }
    }
}

どんな助けでも大歓迎です。また、それが問題かどうかはわかりませんが、VS11 ベータ版を使用しています。

//マーティン

4

2 に答える 2

5
public DLG Dtype
    {
        get
        {
            return this.Dtype;
        }
        set
        {
            this.Dtype = value;
        }
    }

それ自体を参照するプロパティがあるため、ゲッターとセッター内で(それぞれ)独自のゲッターとセッターを呼び出します。より適切なのは、空のアクセサーを持つことです。

public DLG DType{get; set;}

または、プライベート変数を参照するアクセサーを持たせるには:

private DLG dtype;
public DLG Dtype
    {
        get
        {
            return this.dtype;
        }
        set
        {
            this.dtype = value;
        }
    }
于 2012-04-04T14:33:13.533 に答える
3

StackOverflowExceptionゲッターとセッターが無限ループ (Dtype -> Dtype -> Dtype ...) で自分自身を呼び出すため、プロパティが原因であると思います。

代わりに次のコードを試してください。

private string labelText;

public DLG Dtype { get; set; }

public string LabelText 
{
  get { return this.labelText; }
  set
  {
    this.labelText = value;
    label1.Text = value;
  }
}
于 2012-04-04T14:33:06.557 に答える