Windows forms форма внутри формы

i want to open multiple instances of one form and display it in another form or paenel of another form. how to do it

asked Aug 29, 2009 at 12:23

Moon's user avatar

If you’re not using MDI, you can still add a form to another form, or to a panel on a form.

public Form1()
{
    InitializeComponent();

    Form2 embeddedForm = new Form2();
    embeddedForm.TopLevel = false;
    Controls.Add(embeddedForm);
    embeddedForm.Show();
}

You will need to set the FormBorderStyle to None, unless you want to have an actual movable form inside your form.

If you want to do this to create a reusable «template» to use in multiple forms, you should consider creating a user control instead. Not to be confused with a custom control, which is intended for when you need to do your own drawing instead of using collections of standard Windows controls.

I’m not entirely sure what your intentions are, but MDI (as mentioned in one of the other answers) might actually be what you’re looking for.

answered Aug 29, 2009 at 12:30

Thorarin's user avatar

ThorarinThorarin

47.4k12 gold badges75 silver badges111 bronze badges

6

You should:

1) Choose for MDI, that means accepting the complete MDI style for your GUI

or

2) Not embed Forms at all, it’s better (and easier) to use UserControls. Try them out before you make a choice. If you do use Forms, make sure shortcut keys etc are all working like you want.

Short intro: You design a UserControl like a Form and then place it on a Form like any other Control.

answered Aug 29, 2009 at 14:48

H H's user avatar

H HH H

264k31 gold badges332 silver badges515 bronze badges

1

Form1 fChild = new Form1();
fChild.MdiParent = this;
fChild.Show();

And the IsMDIContainer of the parent should be set to True.

For a complete tutorial, you can refer to : Introduction to MDI Forms with C# @ CodeProject.

answered Aug 29, 2009 at 12:27

Moayad Mardini's user avatar

Moayad MardiniMoayad Mardini

7,2715 gold badges41 silver badges58 bronze badges

1

I came across this older thread looking for something similar. In case anyone else is looking — I used Add New Item >Windows Forms > Inherited Form. It allows you to choose a form to embed as the starting point for another form. This was is in VS 2015 Community Edition.

answered Sep 12, 2016 at 20:12

StuM68's user avatar

1

4 / 4 / 0

Регистрация: 08.09.2009

Сообщений: 90

1

Как из первой формы открыть вторую форму, внутри первой?

17.01.2010, 20:28. Показов 22601. Ответов 11


Студворк — интернет-сервис помощи студентам

как из первой формы открыть вторую форму, внутри первой?



0



IT_Exp

MCSD: APP BUILDER

8794 / 1073 / 104

Регистрация: 17.06.2006

Сообщений: 12,602

17.01.2010, 20:37

2

stalex,

в нужном месте пишешь:

C#
1
using (var f = new Form2()) f.ShowDialog(this);



0



4 / 4 / 0

Регистрация: 08.09.2009

Сообщений: 90

17.01.2010, 20:49

 [ТС]

3

Написал так выдает ошибку,
The type or namespace name ‘var’ could not be found (are you missing a using directive or an assembly reference?)



0



MCSD: APP BUILDER

8794 / 1073 / 104

Регистрация: 17.06.2006

Сообщений: 12,602

17.01.2010, 20:56

4

это для фреймворка 3.5



0



4 / 4 / 0

Регистрация: 08.09.2009

Сообщений: 90

17.01.2010, 21:09

 [ТС]

5

если на машине установлен Visual Studio 2005 то достаточно поставить Framework 3.5 или необходимо поставить Visual studio 2008?

Добавлено через 7 минут
Я хотел использовать свойство Parent, только незнаю как правильно.



0



MCSD: APP BUILDER

8794 / 1073 / 104

Регистрация: 17.06.2006

Сообщений: 12,602

17.01.2010, 21:12

6

stalex,
нужна установленная vs2008

или можно var заменить на тип: Form2 f = …



0



4 / 4 / 0

Регистрация: 08.09.2009

Сообщений: 90

17.01.2010, 21:18

 [ТС]

7

спасибо этот способ лучше переустановки vs, вообще нужно что бы вторая форма открывалась, по типу как в 1С открываются справочники, то есть окно как бы разпологается внутри рабочей области другого окна. Надеюсь что понятно описал проблему и меня поймут -);



0



Hamsterr

8 / 8 / 0

Регистрация: 19.11.2009

Сообщений: 33

17.01.2010, 21:45

8

Для того что бы дочерние окна располагались только внутри родительского, в главной форме нужно сделать так

Главная форма:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 newForm = new Form2(this);
            newForm.MdiParent = this;
            newForm.Show();
            //newForm.ShowDialog(); // вызов дочерней формы в виде диалогового окна
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            this.IsMdiContainer = true;
        }
    }
}

Дочерняя форма:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication6
{
    public partial class Form2 : Form
    {
        public Form2(Form1 ParrentForm)
        {
            InitializeComponent();
        }
    }
}

И на сколько я помню, VS2008 не обязательна



0



4 / 4 / 0

Регистрация: 08.09.2009

Сообщений: 90

18.01.2010, 06:32

 [ТС]

9

Открытие второй формы работает, но загвоздка в том что если минимизировать окно form2, то оно минимизируется на панель здачь виндовс, а нужно чтоб была панелька в form1 на которую бы она сворачивалась, и еще нужно чтобы form2 была строго внутри рабочей области form1.

Добавлено через 35 минут
cпс, более менее разобрался.



0



8 / 8 / 0

Регистрация: 19.11.2009

Сообщений: 33

18.01.2010, 15:11

10

Цитата
Сообщение от stalex
Посмотреть сообщение

Открытие второй формы работает, но загвоздка в том что если минимизировать окно form2, то оно минимизируется на панель здачь виндовс, а нужно чтоб была панелька в form1 на которую бы она сворачивалась, и еще нужно чтобы form2 была строго внутри рабочей области form1.

Видимо что — то не правильно сделал, у меня сворачивается в родительскую форму.



0



81 / 81 / 8

Регистрация: 13.01.2010

Сообщений: 304

21.01.2010, 15:04

11

Не хочу создавать новую тему, поднял эту. Я создал дочернюю форму, она не выходит за пределы родительской, сворачивается вместе с ней. Все прекрасно. Возникает только одна проблема. Когда дочерняя форма целиком не помещается в родительскую, появляются скроллбары. Как их можно убрать, сделать невидимыми или разрешать перемещение дочерней формы только при условии, что она целиком будет в родительской? Хотя б вообще запретить ей перемещаться.



0



3 / 3 / 0

Регистрация: 23.03.2009

Сообщений: 38

25.01.2010, 10:57

12



0



i have developed a windows form application using c#.

it has 2 forms like login form and main form. When i enter the correct login credentials it should close(not hide) the login form and display the main form.

i used the following code

MainForm main=new MainForm();
this.hide();//close login form
main.show();//display main form

but when I close the main form using the cross mark(right upper corner) in the mdi container, the main form closes but the application is still running in the task manager.

If I use the following code instead of the previous code, application will close before main form display.

this.close()//close login form
main.show();//display main form

do i have to hide mdi container from the main form or is there any way to achieve this? please help.

sim1's user avatar

sim1

7227 silver badges12 bronze badges

asked Jun 11, 2013 at 9:56

sanzy's user avatar

Try like this:

this.Hide();
Main.ShowDialog();
this.Close();

First, you hide the login form.
Next, you show the Main form dialog, but prevent the caller of «ShowDialog()» from continuing until the dialog is closed.
Last, once the dialog is closed, you close the login form, ending the application.

answered Jun 11, 2013 at 11:16

Sathish's user avatar

SathishSathish

4,4194 gold badges30 silver badges59 bronze badges

1

The application is still running because you still have one form that is still alive but hidden.

You can subscribe the Close event in MainForm and manually exit the application through Application.Exit().

Another option is to make sure there is only one window alive: open MainForm in the handler of the LoginForm.Close event as described here: Windows Forms: Change application mainwindow at runtime

MyForm1 f = new MyForm1();
f.Close += OnOpenOverviewWin();
Application.ShutdownMode = ShutdownMode.OnLastWindowClose;
Application.Run(f);

void OnOpenOverviewWin()
{
  if (loginok)
  {
    MyOverViewForm f = new MyOverViewForm ();
    f.Show();
  }
}

Community's user avatar

answered Jun 11, 2013 at 10:11

sim1's user avatar

sim1sim1

7227 silver badges12 bronze badges

You need to show main form before closing login form.
try this:

main.show();//display main form
this.close()//close login form

answered Jun 11, 2013 at 10:18

Itz.Irshad's user avatar

Itz.IrshadItz.Irshad

1,0145 gold badges23 silver badges44 bronze badges

2

What I always do is :

MainForm main=new MainForm();
Visible = false;
main.Show();

and when in my main form I set the form_closed event handler to Application.Exit();
like this:

private void main_FormClosed(object sender, FormClosedEventArgs e)
{
    Application.Exit();
}

so when the user click close the main all application stops

ZeMoon's user avatar

ZeMoon

20.1k5 gold badges57 silver badges98 bronze badges

answered Apr 1, 2014 at 5:22

jafaritaqi's user avatar

jafaritaqijafaritaqi

5887 silver badges14 bronze badges

I think the accepted answer is incorrect to some extent. This is the actual answer the OP was looking for. Sorry it took a year to get answered. Inside of your Main() method in your project’s Program.cs file, copy and paste the following at the bottom:

        Logon logonForm = new Logon();
        if(logonForm.ShowDialog() == DialogResult.OK)
        {
            Application.Run(new Portal());             
        }

Inside of your logonForm when the user is authenticated or has a successful login event set the form’s DialogResult = DialogResult.OK Here is an example of this:

    private void logonButton_Click(object sender, EventArgs e)
    {
        string username = usernameTextBox.Text;
        string password = passwordTextBox.Text;

        if(logon(username, password))
        {
            MessageBox.Show("Logged On Successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
        }
        else
        {
            MessageBox.Show(getFailureReason(), "Failure",
                            MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

answered Jan 9, 2015 at 20:28

waltmagic's user avatar

waltmagicwaltmagic

6312 gold badges9 silver badges23 bronze badges

  • Remove From My Forums
  • Question

  • Hi everyone,

    I have two forms and a button in main form in my Winforms project. I want to know how can i open an another form(form2/child-form) inside the existing form. I know this can be done using MDI Control but i want to know is there any other way to do that without
    using MDI Control.

    Thank you!

    • Edited by

      Sunday, August 9, 2015 1:59 AM

Answers

  • Hi,

    set the TopLevel property to false and set a Parent to the form

                Form f = new Form();
                f.TopLevel = false;
                f.Parent = this;  
                f.Show();

    Regards,

      Thorsten

    • Edited by
      Thorsten Gudera
      Tuesday, July 28, 2015 5:46 PM
    • Marked as answer by
      Youjun Tang
      Tuesday, August 4, 2015 5:26 AM

Как создать форму внутри панели другой формы? C# Windows Forms

В разработке приложений на C# с использованием Windows Forms, иногда возникает необходимость создать дополнительные формы внутри существующей. Одним из способов достижения этой цели является создание формы внутри панели другой формы.

В этой статье мы рассмотрим подробную инструкцию о том, как создать форму внутри панели другой формы, используя C# и Windows Forms.

Шаг 1: Создание нового проекта Windows Forms

В первую очередь, создадим новый проект Windows Forms в Visual Studio. Для этого выполним следующие шаги:

1. Запустите Visual Studio и выберите «Создать новый проект».
2. В окне «Создание проекта» выберите шаблон «Windows Forms App (.NET Framework)» и нажмите «Далее».
3. Введите имя проекта и выберите место сохранения проекта на вашем компьютере.
4. Нажмите кнопку «Создать», чтобы создать новый проект.

Шаг 2: Добавление панели на форму

После создания нового проекта, добавим панель на главную форму. Для этого выполним следующие шаги:

1. Убедитесь, что форма главного окна открыта в дизайнере.
2. На панели «Обозреватель решений» найдите «Form1.cs» и дважды щелкните на нем, чтобы открыть его в дизайнере.
3. Воспользуйтесь инструментом «Панель» из панели инструментов и добавьте панель на форму.
4. Можно изменить размер и расположение панели, если это необходимо.

Шаг 3: Создание новой формы

Теперь создадим новую форму, которую мы хотим поместить внутри панели. Для этого выполним следующие шаги:

1. Щелкните правой кнопкой мыши на проекте в «Обозревателе решений» и выберите «Добавить» -> «Новый элемент».
2. В появившемся окне выберите шаблон «Окно Windows Forms» и введите имя новой формы. Нажмите кнопку «Добавить».
3. Новая форма будет создана и открыта в дизайнере.

Шаг 4: Задание размера и стиля новой формы

Перед тем, как мы сможем поместить новую форму внутри панели, нам нужно изменить ее размер и стиль. Для этого выполним следующие шаги:

1. В дизайнере новой формы, используйте свойство «ClientSize» для изменения размера формы таким образом, чтобы она соответствовала размеру и расположению панели, в которой она будет размещена.
2. Также по желанию, можно изменить стиль окна, задав свойство «FormBorderStyle» с нужным значением (например, «FixedSingle» для одиночной рамки).

Шаг 5: Помещение новой формы внутри панели

Теперь, когда мы создали и настроили новую форму, мы можем поместить ее внутри панели главной формы. Для этого выполним следующие шаги:

1. Вернемся к дизайнеру главной формы, где мы ранее добавили панель.
2. Дважды щелкните на панели, чтобы открыть событие «Load» для панели.
3. В методе обработчика события «Load» добавим следующий код:

private void panel1_Load(object sender, EventArgs e)
{
// Создаем экземпляр новой формы
Form2 form2 = new Form2();

// Делаем форму ребенком панели
form2.TopLevel = false;
form2.Parent = panel1;

// Задаем размер и отображаем форму
form2.Dock = DockStyle.Fill;
form2.Show();
}

В этом коде мы создаем экземпляр новой формы, делаем ее ребенком панели (устанавливая свойство «TopLevel» в значение «false» и свойство «Parent» в панель), а затем задаем размер формы, используя свойство «DockStyle.Fill», чтобы она заполнила всю панель. В конце мы вызываем метод «Show()» для отображения формы.

Шаг 6: Запуск приложения

Теперь, когда мы настроили все необходимое, мы можем запустить приложение и увидеть, как новая форма отображается внутри панели главной формы.

1. Нажмите кнопку «F5» или выберите пункт меню «Отладка» -> «Запуск отладки», чтобы запустить приложение.
2. Вы должны увидеть главную форму с панелью, а внутри нее — новую форму.

Заключение

В этой статье мы рассмотрели подробный процесс создания формы внутри панели другой формы, используя C# и Windows Forms. Надеемся, что данная информация оказалась полезной и поможет вам создавать более сложные пользовательские интерфейсы в ваших приложениях.

  • Windows h c графика в консоли
  • Windows game launcher windows 7
  • Windows forms ссылка на объект не указывает на экземпляр объекта
  • Windows gui version of fat32format
  • Windows game explorer windows 10