Это один из возможных способов, возможно, не наибольший , для чтения значений свойств, заданных в форме (форма с именем add_thing
здесь) из другой формы (FormA
).
Поскольку в FormA
вы создаете новый экземпляр add_thing
, вы можете подписаться на его событие FormClosing()
, которое будет вызвано, когда форма будет закрыта, до DialogResult
установлено.
Обратите внимание, что для подписки на событие используется Lambda: frmAddThing.FormClosing += (obj, evt) => { }
.
Конечно, вы можете использовать стандартный обработчик событий, если вам не нравится этот синтаксис.
Я предложил событие FormClosing
для обработки этого обмена , потому что FormClosingEventArgs
дает вам возможность отменить событие, поэтому форма не закроется, если потребуется,Поскольку Dialog не знает , как использовать эти пути, у вас есть второй шанс показать уведомление, например.
В обработчике событий мы можем прочитать значения открытых свойств до закрытия формы.
Если результат add_thing
равен DialogResult.OK
, то сделать что-то с обновленнымценности.
Другой, возможно, лучший способ заключается в использовании интерфейса INotifyPropertyChanged для уведомления подписчиков об изменении значения свойства.
Или что-то подобное, как вы можете увидеть в этом вопросе.:
Как я могу сделать так, чтобы значение переменной отслеживало значение другого
В любом случае, это могут быть изменения, применяемые к текущим классам без изменения большей части того, что уже естьтам:
В FormA
(звонящий):
public partial class FormA : Form
{
string frmAddThingPath1 = string.Empty;
string frmAddThingPath2 = string.Empty;
string frmAddThingDescription = string.Empty;
private void addevid_Click(object sender, EventArgs e)
{
add_thing frmAddThing = new add_thing();
frmAddThing.FormClosing += (obj, evt) => {
this.frmAddThingPath1 = frmAddThing.piccpath1;
this.frmAddThingPath2 = frmAddThing.piccpath2;
this.frmAddThingDescription = frmAddThing.description;
//If something is wrong with these paths, you can set
//e.Cancel = true and notify to 'start again'
};
ClearDialogResults();
if(frmAddThing.ShowDialog() == DialogResult.OK) {
//On Form closed, do something with the results
Console.WriteLine(this.frmAddThingPath1);
}
frmAddThing.Dispose();
}
private void ClearDialogResults()
{
frmAddThingPath1 = string.Empty;
frmAddThingPath2 = string.Empty;
frmAddThingDescription = string.Empty;
}
}
В форме add_thing
:
public partial class add_thing : Form
{
public string piccpath1 { get; set; }
public string piccpath2 { get; set; }
public string description { get; set; }
public string titlee { get; set; }
public add_thing() => InitializeComponent();
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK) {
string picPath = openFileDialog1.FileName;
pictureBox1.Image = (Bitmap)Image.FromFile(picpath).Clone();
string[] extract = Regex.Split(picpath, "evidence");
string piPath2 = Regex.Replace(extract[1], "evidence", "");
this.piccpath1 = picPath;
this.piccpath2 = piPath2;
}
}
private void button3_Click(object sender, EventArgs e)
{
this.description = richTextBox1.Text;
this.titlee = textBox1.Text;
this.DialogResult = DialogResult.OK;
}
}