0

Как отмечают в комментариях, вы никогда не должны делать этого для реального приложения, так как это плохая практика. Я просто хочу понять, как свойства действительно работают с Visual Studio, и никогда не сделают этого в реальном приложении.Тип 'System.Windows.Forms.Form' не имеет свойства с именем 'textBox1'

Я получаю эту ошибку, когда пытаюсь просмотреть дизайн формы, которую я создал. Я вошел в код и установите в поле textBox1 общественность и добавлены методы получения и установки:

namespace WindowsFormsApplication2 
{ 
    partial class Form2 
    { 
     /// <summary> 
     /// Required designer variable. 
     /// </summary> 
     private System.ComponentModel.IContainer components = null; 

     /// <summary> 
     /// Clean up any resources being used. 
     /// </summary> 
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
     protected override void Dispose(bool disposing) 
     { 
      if (disposing && (components != null)) 
      { 
       components.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     #region Windows Form Designer generated code 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     private void InitializeComponent() 
     { 
      this.textBox1 = new System.Windows.Forms.TextBox(); 
      this.SuspendLayout(); 
      // 
      // textBox1 
      // 
      this.textBox1.Location = new System.Drawing.Point(85, 82); 
      this.textBox1.Name = "textBox1"; 
      this.textBox1.Size = new System.Drawing.Size(100, 20); 
      this.textBox1.TabIndex = 0; 
      // 
      // Form2 
      // 
      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.ClientSize = new System.Drawing.Size(284, 261); 
      this.Controls.Add(this.textBox1); 
      this.Name = "Form2"; 
      this.Text = "Form2"; 
      this.ResumeLayout(false); 
      this.PerformLayout(); 
     } 

     #endregion 
     public System.Windows.Forms.TextBox textBox1 { get; private set; } 
    } 
} 

Когда я запускаю программу, она компилирует и работает без ошибок, и там явно объявлены textBox1 недвижимости. Почему Visual Studio разбивается, когда я использую свойства вместо обычных полей?

EDIT: Спасибо за фиксируя блок кода, я собирался сделать это сам

+1

Вместо того, чтобы заменять поле общедоступной авто-недвижимостью, почему бы просто не добавить свойство, предоставляющее доступ к генерируемому конструктором полем? – cubrr

+2

Вы действительно не должны пытаться изменить файл designer.cs .. используйте другую половину частичного класса – Sayse

+0

@GrawCube, хотя я использую свойство auto будет менее подробным, чем наличие отдельного свойства для каждого компонента. Теоретически это должно работать. Мне просто интересно, почему это не так. –

ответ

2

Вы получаете эту ошибку, потому что вы делаете изменения в дизайнере сгенерированного кода вручную. Если вы нажмете на текстовое поле в своем дизайнере, вы можете сделать его общедоступным через самого конструктора, и тогда у вас не будет этой проблемы.

+0

Могу ли я также превратить его в собственность? Я пытаюсь сделать его доступным извне класса вместо этого, но все же сохраняю контроль над настройкой поля (и без использования гейтеров/аксессуаров в стиле Java). –

+1

Вы можете, потому что C# использует частичные классы. Но тогда не делайте этого в создаваемом конструктором файле. щелкните правой кнопкой мыши на форме в дизайнере, а затем выберите код просмотра. Там вы можете создать свойство поля редактирования. –

Смежные вопросы