Проблемы с применением MDI - PullRequest
0 голосов
/ 01 января 2012

Общее описание приложения: Основная форма в виде MDI-контейнера.При запуске приложения, если не существует xml-файла для конфигурации базы данных (это проверяется в главной форме) Основной формы, я вызываю другую форму как showdialog (), чтобы заполнить всю информацию базы данных для построения строки подключения.Затем я закрываю форму и открываю другую для входа в систему, затем я возвращаюсь в основную форму с разделенным контейнером (2 панели: 1 меню сверху, 2 содержимого из дочерних форм).

Я открываю формы с:

    private void PlanButton_Click(object sender, EventArgs e)
{
    plan.TopLevel = false;
    KontenerMenu.Panel2.Controls.Add(plan);
    plan.Dock = DockStyle.Fill;
    plan.Show();
}

и закройте форму с:

private void Plan_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = false;
    this.Hide();
}

Проблемы с приложением:

1.Когда я нажимаю кнопку Отмена, когда я открываю форму ShowDialog () для приложений базы данных падает.Кнопка Отмена просто:

private void cancelButton_Click(object sender, EventArgs e)
{
    Application.Exit();
}

2. У меня проблема с нажатием кнопки, чтобы открыть / закрыть / снова открыть дочерние формы.Когда я нажимаю «X» и хочу открыть, приложение вылетает, за исключением того, что оно не может ссылаться на несуществующий объект

3.У меня есть несколько кнопок, когда я нажимаю одну, а затем другую, она всегда находится ниже первой, а не сверху

4.Например, моя форма 200x200, и в правом нижнем углу у меня есть кнопка (скажем, расположение 190x190), и я нажимаю кнопку максимизации.Моя кнопка все еще на 190x190, и я хотел бы, чтобы она была в правом нижнем углу.Я не мог найти недвижимость для этого.Есть ли или я должен написать код для этого.

Ответы [ 3 ]

0 голосов
/ 01 января 2012

Вместо того, чтобы пытаться выйти из приложения из самой диалоговой формы, вы должны вернуть значение DialogResult и проверить его в основной форме.Кнопка отмены в диалоговом окне не нуждается в каком-либо коде, просто установите для свойства DialogResult значение «Отмена», а для кнопки «ОК» установите для DialogResult значение «ОК».

DialogForm f = new DialogForm();
DialogResult r = f.ShowDialog();
if (r == DialogResult.Cancel)
{
   Close();
}
0 голосов
/ 01 января 2012

Я сразу вижу ряд проблем с вашим кодом, в том числе:

  1. Если вы собираетесь динамически добавлять элементы управления с помощью Controls.Add, вы должны убедиться, что добавляемые элементы управлениядинамически создаются с использованием new ().Мне кажется, что у вас нет четкого понимания времени жизни объекта и жизненного цикла элемента управления WindowForms.
  2. Метод Application.Exit следует использовать только в исключительных случаях.Его цель - добиться именно того результата, который вы наблюдаете, - немедленно «вывести» приложение из строя.Самый простой способ заставить кнопку закрыть модальное диалоговое окно - установить свойство DialogResult для кнопки.
  3. У Winforms есть очень элегантная система для размещения элемента управления в окне переменного размера.Чтобы использовать эту систему, вы должны ознакомиться со свойствами Anchor и Dock, которые доступны на всех элементах управления.

Похоже, что вы пытаетесь изучать WinForms методом проб и ошибок,Вы можете сделать это, но это займет намного больше времени и будет гораздо более болезненным, чем овладение хорошим учебником, книгой или, возможно, даже посещением класса, если вы сможете им управлять.Это позволит вам решать эти вопросы по одному и получать гораздо больше удовольствия от обучения.

0 голосов
/ 01 января 2012

Я не уверен, что понял ваши вопросы. Пожалуйста, проясните их.
Но в качестве ответа на вопрос № 4 есть свойство привязки, которое делает то, что вы хотите.

...