2012-04-04 41 views
0

我第一次發現自己編碼C3,並在looong時間第一次使用Visual Studio。C#用戶控件崩潰VS11

我創建了一個用戶控件,允許選擇一個文件/文件夾等,以便使這種控件更容易在未來實現。但是,無論何時將控件拖動到任何形式,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測試版。

//馬丁

回答

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; 
     } 
    } 
+0

尼斯...的伎倆...... 現在它只是抱怨公共字符串,表示「期望的類,委託,枚舉,接口或結構」如何? Accoridng to http://msdn.microsoft.com/en-us/library/aa288470%28v=vs.71%29.aspx它應該是很好... – Martinnj 2012-04-04 14:45:31

+0

很好抓雅各布 – Habib 2012-04-04 14:55:18

3

我想你的性能造成StackOverflowException,因爲getter和setter調用自己在一個無限循環(D型 - > D型 - > D型...)。

試試這個代碼,而不是:

private string labelText; 

public DLG Dtype { get; set; } 

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