2013-03-15 4 views
1

Как я могу ссылаться на объект TextBox (скажем, textBox1) в другой пользовательский класс в файле form1.cs?Текст Ссылка на объект

В myclass, я написал textBox1, но intelliSense не предлагал его мне. Изменение частной общественности не решает ее.

Вот пример кода Form1.cs

namespace Calculator { 
    public partial class Form1: Form { 
     public Form1() { 
      // InitializeComponent(); 
     } 

     class myclass { 
      // What can I do to make texbox1 show up in intelliSense here? 
      // textBox1 
     } 

     public System.Windows.Forms.TextBox textBox1; 
    } 
} 
+4

Просьба сделать ваш вопрос более понятным и понятным, чтобы мы могли ответить на него. –

+1

И, пожалуйста, напишите какой-нибудь код. – AbZy

+0

Кстати, предпочтительный способ сделать то, что сказал Роберт Харви, показывает нам какой-то код. – dasblinkenlight

ответ

4

Если вы хотите, чтобы ссылаться на него непосредственно в сферу myClass, а затем объявить его как статический.

Или вам понадобится экземпляр Form1, но это не позволит вам объявить ссылку на него в области определения класса, вам нужно создать экземпляр Form1 в конструкторе (или ввести инициализатор), который вы можете назначить его члену myClass.

namespace Calculator { 
    public partial class Form1: Form { 
     public Form1() { 
      InitializeComponent(); 
     } 

     class myclass { 
      TextBox textBox3=Form1.textBox1; 
      TextBox textBox4; 
      Form1 form1; 

      public myclass() { 
       form1=new Form1(); 
       textBox4=form1.textBox2; 
      } 
     } 

     static public System.Windows.Forms.TextBox textBox1; 
     public System.Windows.Forms.TextBox textBox2; 
    } 
} 

обновление:

Для относительно текущего экземпляра Form1, следующее один из различных способов передать текущий экземпляр, когда Instantiate myclass

namespace Calculator { 
    public partial class Form1: Form { 
     public Form1() { 
      InitializeComponent(); 

      textBox1=textBox2; // demonstration for "static make sense" 

      var x=new Form1.myclass { 
       form1=this 
      }; 

      // now x.textBox3 is reference to textBox2 
     } 

     public class myclass { 
      TextBox textBox3=Form1.textBox1; 
      TextBox textBox4; 
      internal Form1 form1; 

      public myclass() { 
       // form1=new Form1(); 
       textBox4=form1.textBox2; 
      } 
     } 

     static public System.Windows.Forms.TextBox textBox1; 
     public System.Windows.Forms.TextBox textBox2; 
    } 
} 
+0

Просто код для бессмысленной копии и склеивание не очень полезно для будущих посетителей с аналогичной, но не совсем той же проблемой. Для кодовых блоков этой длины должно быть какое-то объяснение, описывающее, что делает код. –

+0

Я печатаю и сохраняю. –

+0

@ O.R.Mapper его классный, Кен первым ответил на этот вновь открытый вопрос и подробно остановился ... некоторым из нас нужно немного времени. –

3

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

public partial class Form1: Form { 
    public Form1() { 
     // InitializeComponent(); 
    } 

    class myclass { 
     private Form1 parent; 

     public myclass(Form1 parent) { 
      this.parent = parent; 
     } 

     public void DoSomething() { 
      parent.textBox1.Text = "Hello, World!"; 
     } 
    } 

    public System.Windows.Forms.TextBox textBox1; 
}