Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Вы пытаетесь получить доступ к классу в противоположность объекту. Тот оператор может сбивать с толку новичков, но Вы эффективно пытаетесь открыть свою дверь дома путем взятия двери на планах дома.
, Если Вы на самом деле хотели получить доступ к компонентам формы непосредственно от класса (который Вы не делаете) Вы использовали бы переменную, которая инстанцирует Вашей формы.
, В зависимости от которого пути Вы хотите пойти, Вы были бы лучше или отправки текста управления или безотносительно к методу в Ваших классах, например,
public void DoSomethingWithText(string formText)
{
// do something text in here
}
или представление свойств на Вашем классе формы и установке текста формы там - например,
string SomeProperty
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
Другое решение состояло бы в том, чтобы передать текстовое поле (или управление, которое Вы хотите изменить) в метод, который будет управлять им в качестве параметра.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
TestClass test = new TestClass();
test.ModifyText(textBox1);
}
}
public class TestClass
{
public void ModifyText(TextBox textBox)
{
textBox.Text = "New text";
}
}
Необходимо получить доступ к объекту...., Вы не можете просто спросить класс формы....
, например,
Вы были бы сделанных некоторая вещь как
Form1.txtLog.Text = "blah"
вместо
Form1 blah = new Form1();
blah.txtLog.Text = "hello"
Необходимо сделать участников в для класса формы или общественность или, если класс обслуживания находится в том же блоке, внутреннем. Видимостью средств управления Windows можно управлять через их свойства Modifiers.
Примечание, что это обычно полагало, что плохая практика явно связывает класс обслуживания с классом UI. Скорее необходимо создать хорошие интерфейсы между классом обслуживания и классом формы. Однако для изучения или просто обычно бездельничания, земля не отделит свою ось, если Вы представите участников формы для классов обслуживания.
армированный пластик
Если форма запускается первой, в обработчике загрузки формы мы можем создать копию нашего класса. У нас могут быть свойства, которые ссылаются на любые элементы управления, на которые мы хотим ссылаться. Передайте ссылку на форму this конструктору класса.
public partial class Form1 : Form
{
public ListView Lv
{
get { return lvProcesses; }
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Utilities ut = new Utilities(this);
}
}
В вашем классе ссылка из формы передается в конструктор и сохраняется как закрытый член. Эту ссылку на форму можно использовать для доступа к свойствам формы.
class Utilities
{
private Form1 _mainForm;
public Utilities(Form1 mainForm)
{
_mainForm = mainForm;
_mainForm.Lv.Items.Clear();
}
}