По какой-то причине моей переменной (которая содержит несколько переменных) в моей форме обновления не может быть присвоено какое-либо значение. Я отправляю то, что мне нужно)], Это странно, поскольку ранее я установил строку в предыдущей открытой форме, используя тот же метод, который использовал в этой.
Код:
//This is on the seriepage form
private void SeriesPageUpdate_Click(object sender, EventArgs e)
{
Update update = new Update();
update.UpdateBaseInformation = UpdateData;//Data taken from Controls in the seriepage form
update.Show();
}
//this is on the form that i am trying to set updatebaseinformation on
public partial class Update : Form
{
public DataClass UpdateBaseInformation { get; set; } //I want to set this to what i got from the other form just once
DataAccesObject accesObject = new DataAccesObject();
public Update()
{
InitializeComponent();
SeriesImage.ImageLocation = UpdateBaseInformation.C_Image;
SeriesLink.Text = UpdateBaseInformation.C_Link;
SeriesLocation.Text = UpdateBaseInformation.C_Location;
SeriesTitle.Text = UpdateBaseInformation.C_Title;
SeriesRating.Text =UpdateBaseInformation.C_Rating;
SeriesDescription.Text = UpdateBaseInformation.C_Description;
if (UpdateBaseInformation.C_Type == "Comic")
{
SeriesTypeComic.Checked = true;
}
else if (UpdateBaseInformation.C_Type == "Show")
{
SeriesTypeShow.Checked = true;
}
else if (UpdateBaseInformation.C_Type == "Book")
{
SeriesTypeBook.Checked = true;
}
else if (UpdateBaseInformation.C_Type == "Movie")
{
SeriesTypeMovie.Checked = true;
}
string[] Temporary = accesObject.SplitTagBundle(UpdateBaseInformation.C_Tags);
for (int i = 0; i < Temporary.Length; i++)
{
SeriesTag.Items.Add(Temporary[i]);
}
}
}
//And this is the code for setting a string in the seriepage form
private void Mouseclicked(object sender,EventArgs e)
{
SeriePage page = new SeriePage();
page.Title = ControlTitle;
page.Show();
}
//And this is the string getting set
public string Title { get; set; }
Они абсолютно одинаковы, так почему один работает, а другой нет?
Я ничего не могу найти по этому поводу :(
Проблема в том, что эта строка:
Update update = new Update();
вызывает конструктор класса Update
. В этом конструкторе вы пытаетесь использовать свойство UpdateBaseInformation
класса. Но на данный момент это все еще null
(его начальное значение).
Это так, потому что вы устанавливаете его только в строке после приведенной выше:
update.UpdateBaseInformation = UpdateData;
Чтобы решить эту проблему, вы можете передать объект UpdateData
конструктору и использовать его для инициализации UpdateBaseInformation
перед его использованием:
public partial class Update : Form
{
public DataClass UpdateBaseInformation { get; set; }
//...
// Default constructor - keep it for the usage of Forms designner:
public Update()
{
InitializeComponent();
}
// Constructor which accepts DataClass:
// -----------vvvvvvvvvvvvvvvvvvvv-
public Update(DataClass updateData) : this()
{
// Initialize the property:
UpdateBaseInformation = updateData;
// Now UpdateBaseInformation will not be `null` and you can use it:
SeriesImage.ImageLocation = UpdateBaseInformation.C_Image;
//...
}
//...
}
И когда вы создадите Update
, передайте UpdateData
конструктору:
private void SeriesPageUpdate_Click(object sender, EventArgs e)
{
//-------------------------vvvvvvvvvv--
Update update = new Update(UpdateData);
update.Show();
}
Обратите внимание, что конструктор по умолчанию по-прежнему доступен для использования дизайнером форм. Конструктор, принимающий объект DataClass
, вызывает его перед выполнением остальных инициализаций.
Что ж, всего несколько минут назад мне не хватило очков, чтобы проголосовать за вас, поэтому я делаю это сейчас!