2015-08-25 2 views
1

C# n00b здесь. Я не могу понять, почему я получаю сообщение об ошибке на TextBox.text поговорке:Ссылка на объект требуется для нестатического TextBox

enter image description here

На прибегая к помощи ошибку, то кажется, что это связано с моей TextBox статичности ..? Я могу вам объяснить, что все это значит? Как сделать его нестатичным? У меня хороший опыт в Java, Obj-C, Python и Swift, если вы можете нарисовать какие-либо сходства.

Код:

namespace WpfApplication2 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Button(object sender, RoutedEventArgs e) 
     { 
      // Create OpenFileDialog 
      Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); 



      // Set filter for file extension and default file extension 
      dlg.DefaultExt = ".txt"; 
      dlg.Filter = "Text Files (*.txt)|*.text"; 


      // Display OpenFileDialog by calling ShowDialog method 
      Nullable<bool> result = dlg.ShowDialog(); 


      // Get the selected file name and display in a TextBox 
      if (result.HasValue && result.Value) 
      { 
       // Open document 
       string filename = dlg.FileName; 
       TextBox.Text = filename; 
      } 

     } 


    } 
} 
+1

Измените имя своего TextBox на 'txtFileName', а затем попробуйте 'txtFileName.Text = имя_файла;'. Кроме того, измените имя своей функции с «Button» на «OnButtonClick» –

+0

Saagar Elias Jacky правильно.«System.Windows.Forms.TextBox» - это * класс *. Вам нужно создать * экземпляр * этого класса - например, «txtFileName» или «textBox1». – paulsm4

+0

'TextBox' и' Button' в основном имя класса, поэтому не используйте их как имя имени метода или текстового поля. –

ответ

2

Если у вас есть TextBox в вашем XAML, вроде этого:

<TextBox Name="textBox1" Width="100" Height="50" /> 

вы можете сослаться на него из кода позади (в вашем примере MainWindow класс) по названию:

textBox1.Text = "Hello World"; 

Th e class TextBox не является статическим классом. Для получения дополнительной информации о статическом классе увидеть этот пост:

c# What is the different between static class and non-static (I am talking about the class itself not the field)

1

Text является свойством экземпляра. Поэтому вам нужно вызвать его, используя пример класса TextBox.

Когда вы делаете:

TextBox.Text = filename; // "TextBox" is a class, not an instance. 

Вы пытаетесь вызвать Text, как если бы это было статическое свойство, но это не так.

Так что я не знаю, есть ли у вас экземпляр TextBox где-то в вашем окне. Если вы добавили его в свое приложение WPF, по умолчанию в VS2015 оно будет называться textBox (которое можно легко смутить с помощью TextBox). Как бы то ни было, вы хотите использовать , чтобы установил свойство Text. Как это:

// consider prefixing with "this" to make sure 
// you are using an instance name and not a class name by mistake. 
this.textBox.Text = filename; 
1

TextBox это имя элемента управления, и я не думаю, что вы можете использовать TextBox.Tex = filename;

Вы должны дать имя вашему TextBox управления с помощью Name свойство в XAML, а затем присвоить значение свойство Text в вашем коде за файлом.

Нечто подобное, имя вашего текстового поля как txtFileName, а затем попытаться присваивая значение как txtFileName.Text = filename;

Кроме того, давая имя, как Button к событию, безусловно, вызовет исключение. Вам лучше использовать какое-то имя, например OnButtonClick, для обработки события Button Click, а не private void Button().

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