C#用户控件崩溃VS11

时间:2012-04-04 14:28:25

标签: c# visual-studio user-controls crash controls

我第一次发现自己编码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 beta。

//马丁

2 个答案:

答案 0 :(得分:5)

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

你有一个属性引用自己,因此在getter和setter中分别调用它自己的getter和setter。更合适的是要么有空访问者:

public DLG DType{get; set;}

或让访问者引用私有变量:

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

答案 1 :(得分:3)

我认为你的属性导致StackOverflowException,因为getter和setter在无限循环中调用自己(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;
  }
}