How to Embed a Form within another Form in c#? - c#

In an internet webpage , there is a constant menu usually placed on the top or left of a page from which user can navigate (They call it Iframes) ..
I would like to know if it is possible to do something like that using WinForm applications or WPF applications in c# .
At present I am simply inheriting forms from a base class . and each time the user needs to navigate , I have no option but to open up a new form with the same Peristent menu ...
Any suggestions here ?

I managed to use usercontrol to embed a form into another ..
Form1 has a userControl , Form2 embedded inside the user control .
things to note was ..
the embedded forms toplevel property should be set to false
the embedded forms FormBorderStyle should be set to none
userControl1.Controls.Clear();
Form2 f = new Form2();
f.Toplevel=flase;
f.Show();
f.TopLevel = false;
userControl1.Controls.Add(f);

You could use an MDI-container in WinForms.
see here and here for more information.

You mean like an MDI application (http://www.codeproject.com/KB/cs/myBestMDI.aspx) or just using a SplitContainer on the form? Really there are many options. WPF has ElementHost I think. Did you do any research yet? What did you find?
You could also take the toolbox approach. Have a parent program start the menu form and then other forms can use it... or it can launch from it... what ever your use case is.

Well, there should be a frame component in WPF which will give you such an option. Then you would use a "view" concept to open the WPF Pages you direct the user to.

Related

c# windows form in form as part of the ihm

i'm new to Windows forms, i searched but didn't find any answer to my problem.
I have a Form that will be my main Windows, and i want to integrated other form in a specific space of my main window.
To be more precise, i have my MainWindow, the user will select what specific fonctionality he want to access and his choice will load another form in the dedicated space below
(for exemple :
- a form that manage every user
- a form that create and manage data
- etc...
I saw you can "load" other form by setting the parent of the form to anoter, but it's like having a window in a window.
what i'm searching, is more like a "fragment" of a IHM, that still has the class[Design] for personification, but dosen't have the close and other window functionnalities.
Im' really sorry guys, yeah i just had to make my borderstyle none.
Really sorry to made you loose your time, and thanks for the answer
Reports rep = new Reports();
rep.FormBorderStyle = FormBorderStyle.None;
rep.MdiParent = this;
rep.Show();

"Include" instead of ShowDialog()

I'm trying to make a WindowsFormApplication in Visual Studio 2015 and need some help.
I've been trying to search for the answer on internet but can find out how to do the following:
I have two windows (solutions?). I open the second window with a button in the first one with this code:
this.Hide();
intermec prodinter = new intermec();
prodinter.ShowDialog();
My question is:
How can i "include" the second window (like "include" in PHP) instead of close the first window and then open the next one, like it does now?
A Form is just another Control. Think of it as a Container (because it holds other Controls).
A User Control can also hold more than one Control. There are ways you can display a Window inside another Window in a WinForms app, but the desired effect is not always guaranteed. So it would be best to place all of your controls (for "page 1", for example) in a User Control called "Page1", and then, when appropriate, add that User Control to the Form, and set its Dock property to Fill.
And when it's time to show a different "page", Hide(); "Page1", and Show(); "Page2".
I think you are talking about form inheritance:
Just create a form, lets call it as frmBase. And add some controls onto frmBase which you want to have on other forms as well.
Create other form, lets call it as frmDerived.
In the code behind of frmDerived, just do the following:
// derive the frmDerived form from frmBase
public partial class frmDerived : frmBase
{
public frmDerived()
{
InitializeComponent();
}
}
And then just check the frmDerived form design, it should include everything from frmBase.
And you may want to make the access modifier of some controls of frmBase to Public as required to access them on frmDerived.
I hope this will help you. :)

Switching between forms (closing one form, then opening another)

So I'm trying to learn a thing or two about coding with c# and something i find quite annoying is the way to switch between forms.
Lets say for a game you want to go to the options panel and when you click the button to get there it closes that window(form1) and opens a new window(form2) for my app.
It doesn't look very nice having windows opening and closing like that so I'm wondering what i can do in order to make it switch from form1 to form2 without closing form1 and not open form2 in a new window (Everything switched on the main window(form1).
Might sound a bit confusing but hopefully you understand what i mean.
The code I'm using so far to switch between forms:
ChangeOptions optionchanger = new ChangeOptions ();
this.Hide();
optionchanger.Show();
You could add two panels to a single form, each of which contains the controls you would otherwise have added to one of the two forms. Then switch between the panels by changing their visibility or Z-order. This is slightly tricky in the Windows Forms Designer because you'll have to design the two panels, then position them in the same spot on the containing form.
As #ryanyuyu points out, you can set the Dock property to DockStyle.Fill and switch which panel is on top using Control.BringToFront or Control.SendToBack(). This is also a decent way to interact with the two panels in the designer, as you can switch which is on top from a context menu option.
To truly have two forms, your only option is to show a dialog. Hiding your current window is of course optional.
However, you can:
Group all the controls on a given "form" into a Panel or GroupBox, then show/hide the container control.
Put all the controls into UserControls and have an instance of each UserControl on the main form. You can then show/hide the control.
I prefer the second method as it keeps the encapsulation tighter. Since you already have two forms, its easy to convert to user controls.

Opening a new WPF form from another WPF form

Firstly, I have a project with a Windows Form that references another project with WPF forms. The windows form has an elementhost which child is one of the WPF documents in the other project.
Now, on this WPF document I want to have a button that upon a click can open another wpf form. Either as a new standalone WPF form, as a modal or whatever.
I cannot, on the button click event, say
WPFform2 WPFform2=new WPFform2();<br>
WPFform2.Show();
... as many other threads on the net suggest, since the show method does not exist.
My solution does not allow some sort of call that changes the main FormĀ“s elementhost, so that is not an option for me.
All my WPF forms derives from UserControl:
public partial class WPFform1: UserControl
The form must be derived from Window to have the Show() method.
Just create a new window that contains only the form you want to show and call Show on it. Or change the control's base class to Window (you will have to rewrite it both in XAML and in the code behind), nothing should really change, Window supports most of UserControl's features.

Winform Templating System like ASP.NET MasterPage or MS Access SubForm

Does a Winform Framework exist for something similar to ASP.NET Masterpage or MS Access SubForm ?
With MS Access SubForm you can do like ASP.NET Masterpage. It's a huge loss of time with Winform when having to create a lot of complex form. You have to compensate with either Code Generation which create code duplication or do Runtime Dynamic Form which is much more difficult.
I searched on the Internet but can't find any.
The closes thing to Master Pages is Form Inheritance. It is regular class inheritance but also supported by the Designer. To try it:
1) Add a form with Ok and Cancel Buttons, Build project (essential)
2) Choose Project, Add new item, Windows and then the Inherited Form template. Pick the Form from step 1) as the base Form. Add some controls.
3) Repeat step 2) a few times
4) make some Buttons to show the Forms, Build and Test
5) Go back to the Form from 1) and change a few things (Background), run again
Your other tool are UserControls, they work much the same as in ASP.NET. You develop them like Forms and apply them as Controls.
You can add forms to a 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 moveable form inside your form.
I was in a bit of a hurry at the time of posting, but Henk is right. You should consider creating a user control for this 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.

Categories

Resources