Рейтинг:
2
Sergey Alexandrovich Kryukov
Я понятия не имею, что может быть неясно в решении 1. Как я уже сказал, установка свойств некоторого экземпляра объектов формы не имеет ничего общего с Show
или ShowDialog
.
Однако не очень приятно напрямую выставлять свойства формы, и, конечно же, недопустимо давать public
доступ; в худшем случае это может быть internal
Однако этот простой подход будет работать. Просто один экземпляр формы должен иметь доступ к другому экземпляру формы, который может быть другим свойством, возможно, только для записи.
Поскольку этот вопрос оказался очень популярным, а мои предыдущие ответы часто не были хорошо поняты, вероятно, были недостаточно ясны, я решил написать статью с советами/трюками, дополненную подробными примерами кода и объяснениями: На многие вопросы ответили сразу — сотрудничество между Windows Forms или WPF Windows.
—СА
Рейтинг:
1
Karthik_Mahalingam
В Form2 создайте свойство, в котором вы хотите поделиться данными как
public partial class Form2 : Form
{
public string DataToShare { get; set; }
и вы можете получить доступ к свойству во время создания экземпляра и показать диалоговое окно.
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.DataToShare = "Pass this data";
f.ShowDialog();
}
Jammes_Ca
я хочу отправлять данные от ребенка к родителю, а не от парета к ребенку. я хочу закрыть родительскую форму от дочерней
Karthik_Mahalingam
тогда вы можете использовать" этот " объект.
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2();
f.ParentFormObject = this;
f.ShowDialog();
}
public partial class Form2 : Form
{
public Form ParentFormObject { get; set; }
Jammes_Ca
я не занижаю ваш код, я хочу отправить данные от ребенка к родителю. и эти данные закроют родительскую форму. например, Я посылаю данные x=1 от ребенка к родителю, а затем родитель, когда он получил x=1, fe закроет его сам.
Karthik_Mahalingam
используя объект родительской формы, вы можете закрыть основную форму в самой дочерней.
опубликуйте свой код, что вы написали?
хотите ли вы получить некоторые данные во всплывающей форме при ее закрытии?
Jammes_Ca
да, когда дочерняя форма закрывается, я хочу отправить данные в родительскую форму.
Karthik_Mahalingam
как вы закрываете форму?
данные взяты из текстового поля?
используя кнопку закрытия по умолчанию или какой-то щелчок кнопки ?
Jammes_Ca
form1 откройте form2. и в форме 2, Когда я нажимаю кнопку, он закрывается сам, и он закрывает form1 тоже
Karthik_Mahalingam
попробуйте это, это поможет..
Форма 1
использование системы;
использование системы.Окна.Формы;
пространство имен WindowsFormsApplication1
{
общественности частичного класс form1 : форма
{
общественного строка данных { получить; набор; }
открытый form1()
{
метод InitializeComponent();
}
частный недействительными методе form1_load(объект отправителя, EventArgs в электронной)
{
}
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
Form2 f = новая форма 2();
Ф.ParentFormObject = это;
Ф.Метод showdialog();
если (SomeData = = " 1")
этот.Закрывать();
}
}
}
-------------------------------------------------------------------------------
Форма 2
использование системы;
использование системы.Окна.Формы;
пространство имен WindowsFormsApplication1
{
публичный частичный класс Form2 : форма
{
public Form1 ParentFormObject { get; set; }
общественные формы Form2()
{
метод InitializeComponent();
}
частный недействительными Form2_Load(объект отправителя, EventArgs в электронной)
{
}
private void Form2_FormClosing(отправитель объекта, FormClosingEventArgs e)
{
ParentFormObject. SomeData = " 1";
}
}
}
// добавить событие FormClosing в form2 (всплывающее окно)
Karthik_Mahalingam
использовать это,
public Form1 ParentFormObject { get; set; }
Sergey Alexandrovich Kryukov
Ничто не является родителем и ничто не является ребенком. Передача данных между экземплярами не имеет ничего общего с Show () или ShowDialog ().
—СА
Karthik_Mahalingam
У вас есть как родительская форма, так и дочерняя форма, вы можете играть с ней.
частный недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
этот.Закрывать();
ParentFormObject.Закрывать();
}
Jammes_Ca
спасибо, но это не очень хорошее решение, потому что "это" он" не поддерживает на компактной рамной конструкции
Karthik_Mahalingam
Я не уверен насчет компактных рамок
Sergey Alexandrovich Kryukov
Это бы сработало, но не так уж приятно раскрывать свойства формы. Хуже всего здесь "публика". Нехорошо давать больше доступа, чем требуется;" внутренний " был бы лучше.
Кроме того, часть "Form2 f = new Form2();" не всегда применима; мы все понимаем, что ссылка на один экземпляр формы может быть передана другому экземпляру, но наш исследователь может нуждаться в некотором объяснении.
Кроме того, вы даете плохой пример именования; автоматически сгенерированные имена, такие как button1_Click, никогда не должны использоваться постоянно, они нарушают очень разумные соглашения об именовании Microsoft (я понимаю, что вы выбрали его у inquirer, но лучше не следовать таким вещам).
См. также Решение 2.
—СА