我第一次发现自己编码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。
//马丁
答案 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;
}
}