Jammes_Ca Ответов: 2

Откройте формы с помощью form.showdialog


Привет, я хочу открыть форму с помощью этого метода


private void button1_Click(object sender, EventArgs e)
    {
        Form2 f = new Form2();

        f.ShowDialog(this);

    }


я получаю эту ошибку
Ошибка 1 отсутствие перегрузки для метода 'ShowDialog' принимает аргументы '1'

Почему?

Что я уже пробовал:

Привет, я хочу открыть форму с помощью этого метода


private void button1_Click(object sender, EventArgs e)
    {
        Form2 f = new Form2();

        f.ShowDialog(this);

    }


я получаю эту ошибку
Ошибка 1 отсутствие перегрузки для метода 'ShowDialog' принимает аргументы '1'

Почему?

Karthik_Mahalingam

какой фреймворк dot net вы используете?

Jammes_Ca

я использую compcat framwork 3.5

Karthik_Mahalingam

Всегда использовать  Ответить  кнопка, чтобы отправить комментарии / запрос пользователю, иначе пользователь не получит уведомления.

Jammes_Ca

ладно :)

Jammes_Ca

Так как же мне решить эту проблему ?

Karthik_Mahalingam

Ф.Метод showdialog();
это работает?

Jammes_Ca

да это workibg но я хочу, чтобы обмениваться данными между ребенком и паррэнт. в приложении windows это работает хорошо, но в компактной рамке это не работает

в форме 1
есть такой код
публичное уведомление о недействительности()
{

этот.Закрывать();
}

в форме 2 это код
Form1 parent = (Form1)this.Владелец;
родитель.Уведомить();
этот.Закрывать();

я хочу закрыть родительскую форму из дочерней формы

Karthik_Mahalingam

какими данными вы хотите поделиться?
от родителя к ребенку?

2 Ответов

Рейтинг:
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.

—СА