How have 2 active forms at the same time? - c#

I have a mainform with a toolstrip. Buttons on the toolstrip open new sub-forms. These forms are smaller in Y direction than the mainform. They are drawn precisely over the Mainform and you can only see the toolstrip.
Full-size image
Now I want to press another button of the toolstrip to close the current active subform and opens a new sub form. But when I press on such a button, the mainwindow gets drawn over the subform (which is understandable) but the button event doesn not get triggered. Than I need to press the button again to open a new sub form and this is inconvenient.
Used code looks as follows
private void MenuButton_Click(object sender, EventArgs e)
{
menu_.SetDesktopBounds(0, 0, 1024, 668);
menu_.Show();
try { ssp.Close(); } catch { }
help.Hide();
}
How can I let the toolstrip buttons remain active after I open a subform?

Separate toolstrip to another form which will control which form will be visible above him.

Related

Opening panel of another form by button of the main form in c# windows application

There are 2 windows forms, one is the main form and another is the subform. In the subform, there is 4 different panel Panel 1,2,3 and 4.In the main form there is one Button.
what I want to do:
I want to open the 2nd panel of subform by clicking the button of the main form.
All you need to do is to keep a reference variable to your subform, put it in your main form, and set its value when you open the subform, like this:
private Form _subForm;
private void OpenSubForm()
{
_subForm = new SubForm();
_subForm.Show();
}
and then you could use it to access your subform's panels from your main form:
private void ButtonClick()
{
_subForm.panel1.Show();
}

How to open a child form from another child form?

I am working on a Windows application. I have a MainForm (Parent) and several childForm. There is a listview in MainForm that contains a childForm name list and by clicking on each name in the list, the relevant childForm shows and the previous ChildForm closes.
I use this codes to show childForm and close the previous childForm in MainForm.cs (ParentForm):
CloseForms();
frm_draft = new frm_ShowDraft();
frm_draft.MdiParent = this;
frm_draft.Show();
CloseForm() is a method that checks, which childForm is runnig and closes it.
So far everything is good.
In one of the childforms there is a Button. When the user clicks on it, it should close this childForm and show another. But when I click on the button, childForm2 shows out of MainForm. How can I show it inside of MainForm?
My code in the button click event:
this.close();
frm_c2 = new frm_child2();
frm_c2.MdiParent = new MainForm().ParentForm; /// Or this.MdiForm
frm_c2.Show();
You should set same MdiForm and call Close at the end:
frm_c2 = new frm_child2();
frm_cLetter.MdiParent = this.MdiParent;
frm_cLetter.Show();
this.Close();
http://www.independent-software.com/weifenluo-dockpanelsuite-tutorial-cookbook/
To show a child form in the main form use the WeiFen Luo library.
This control will make it easier to dock forms into your main form visual studio docking screens
Form with 3 forms inside:
Make sure the IsMdiContainter prop is true.
Example:
public Form1()
{
InitializeComponent();
Form2 f2 = new Form2(); // create new form
// dockPanel is an control from WeiFen Luo more info see the link
// dockPanel control is docked in your mainform.
// this will open Form2 in the dockPanel and align it left
f2.Show(dockPanel, DockState.DockLeft);
}
More docking options:
DockState.Fill docks form in over the hole dockPanel
DockState.Right docks form at the rightside of the dockPanel
DockState.Top docks form at the topside of the dockPanel
for more option check the link
This control will handel responsifnes of the docking forms and will handle allot of positioning calculations for you.

changing the control box on a form when exiting

Ok, I have a question about the Form Controlbox. I was wondering if it is possible to change or add what the exit button does on the form.
I can easily minimize, maximize and exit the form no problem. But this is what I am facing.
My app has an access login. After you log in it comes to the main form. I have a log out button when pressed, it goes back to the login form.
However, if you press the exit button, it exits the main form, and the program is still running, but with no way to bring the login form up.
So what I am trying to do is, when the main form is exited through the red X I want it to go to the login.
I can go the complex route: borderless form, movable form, custom buttons and etc., etc.,
I think it would be easier to change or add the exit button to return to the login form. Is this possible?
Move the logic out of your button click event, into a separate method.
private void button1_Click(object sender, EventArgs e)
{
OverrideFormExit();
}
private void OverrideFormExit()
{
// execute the code that was previously in button1's click event
}
Now you can subscribe that same method to your Form's Closed event, so that it executes when the user closes the Form.
For example, place the following in your Form's constructor:
FormClosed += (s, e) => OverrideFormExit();
Alternatively, you can subscribe to the main Form's Closed event from within the Login Form, when you instantiate the main Form. I'm guessing at what your code looks like here, obviously.
private void ShowMainForm()
{
FormMain frmMain = new FormMain();
frmMain.Show();
frmMain.FormClosed += (s, e) => this.Show();
this.Hide();
}

Properties Window in C#

I'm currently trying to create a Properties Window which is opened after a Button on the Outlook Toolbar is pressed, i now have:
1) the Button on the Toolbar (currently if pressed nothing occurs)
2) i know how to create the method which would hold the action after the Button is Pressed
-but, I am a beginner and i don't know how to create a window which would open after the button is pressed, the Window should be fairly big, and for now have nothing but a checkbox(which i later would like to apply some method to.
if you ever created a window which opens after a button is pressed, i would be really pleased to get your help.
All help is appreciated, thank you
Here's the recommended way of opening a dialog window when the user clicks a button:
Add a new form to your project (e.g. MyForm) and then you can use the following code in your button's click event handler:
private void OnMyButtonClicked(object sender, EventArgs e)
{
MyForm myForm = new MyForm();
if (myForm.ShowDialog() == DialogResult.OK)
{
// The code that should be executed when the dialog was closed
// with an OK dialog result
}
}
In case you do not want the new window to be modal (i.e. you want to allow the user use other parts of the application while the window is opened), the code gets even more simple:
private void OnMyButtonClicked(object sender, EventArgs e)
{
MyForm myForm = new MyForm();
myForm.Show();
}
You can also create your form on the fly without adding one to your project, which is a bit more complicated, but advanced developers prefer this approach instead of messing with the designer ;)
private void OnMyButtonClicked(object sender, EventArgs e)
{
Form myForm = new Form();
myForm.Text = "My Form Title";
// Add a checkbox
CheckBox checkBox = new CheckBox();
checkBox.Text = "Check me";
checkBox.Location = new Point(10, 10);
myForm.Controls.Add(checkBox);
// Show the form
myForm.Show();
}
Here is a small tutorial for you to follow..
http://msdn.microsoft.com/en-us/library/ws1btzy8%28v=vs.90%29.aspx
EDIT: I would also recommend you remember the msdn website because it will prove invaluable for other programming issues you come across..
you have to add a new form to your project. Then you call the constructor where you want to pop up the window.
like this
Form2 form2 = new Form2();
form2.showDialog();
Edit:
where form2 is not the "main" Form of you program.
This'll set your main window to the background as long as the newly popped up window is closed.

Control.Focus() bug

I have some problems with Form control focusing.
On form1 I click a button and run the code below:
private void btnTest_Click(object sender, System.EventArgs e)
{
form2 = new Form2();
Application.Idle += new EventHandler(Application_Idle);
form2.Show();
form2.Activate();
form2.textBox1.Focus();
Form3 form3 = new Form3();
form3.ShowDialog();
}
Then, after this CLR I run the event Application_Idle on which I add a method that must focus on the textBox2 control..
private void Application_Idle(object sender, EventArgs e)
{
form2.textBox2.Focus();
form2.textBox2.Select();
form2.textBox2.Focus();
Application.Idle -= new EventHandler(Application_Idle);
}
But when I click the button on form1, I see Form2 showing, Form3 showing and then Application_Idle method raise, but form2.textBox2 control doesn't get focused...
If I comment out the form3.ShowDialog(); line it's works fine, but how do I focus a form element with another form activation?(form3.ShowDialog()) ?
Remark added:
Problem in also is I have a strict architecture and all I can change is Application_Idle method.
The issue you are having is with modality:
Forms and dialog boxes are either modal or modeless. A modal form or dialog box must be closed or hidden before you can continue working with the rest of the application.
Dialog boxes that display important messages should always be modal. The About dialog box in Visual Studio is an example of a modal dialog box. MessageBox is a modal form you can use.
Modeless forms let you shift the focus between the form and another form without having to close the initial form. The user can continue to work elsewhere in any application while the form is displayed.
When you use ShowDialog, the form that is shown prevents the caller from returning control until the dialog box is closed. If this is not the desired effect, you can use the Show method.
You could focus the textfeld, when the form itself got the focus:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
this.GotFocus += (s, e) =>
{
this.textBox2.Focus();
};
}
}
As John Koerner stated, you cannot set focus to Form 2 while Form 3 is open because of modality.
Since you stated that a user input in Form 3 is necessary to proceed, you should change your approach. You can place a listener watch for Form 3's closing. Only then can you set the focus somewhere else
form3.FormClosed += Application_Idle

Categories