只允许 Menustrip 此时只有一个子项

发布于 2024-11-29 05:55:00 字数 555 浏览 0 评论 0原文

当我单击菜单条中的菜单时,如何一次只允许一个窗口?

例如:我有 Menustrip Ordre、Tarif 等...当我第一次单击 Ordre 时,它​​将打开一个新表单,但第二次我想禁止它。

 private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
    {

        if (Already open)
        {

        }
        else
        {
            Lordre newMDIChild = new Lordre(ClientId);
            // Set the Parent Form of the Child window.
            newMDIChild.MdiParent = this;
            // Display the new form.
            newMDIChild.Show();                
        }

    }

提前谢谢你

How can i allow only one window at a time when i click menu in menustrip ?

Ex: i have Menustrip Ordre, Tarif, etc... when i click Ordre for the first time it will open a new form, but for the second time i want to disallow it.

 private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
    {

        if (Already open)
        {

        }
        else
        {
            Lordre newMDIChild = new Lordre(ClientId);
            // Set the Parent Form of the Child window.
            newMDIChild.MdiParent = this;
            // Display the new form.
            newMDIChild.Show();                
        }

    }

Thanks you in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

歌入人心 2024-12-06 05:55:00

如果您希望仅在第一次创建表单,然后在下次选择菜单项时显示相同的表单,则可以使用以下方法:

private Lordre orderForm = null;
private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (orderForm == null)
        orderForm = new Lordre(ClientId);
        // Set the Parent Form of the Child window.
        orderForm .MdiParent = this;

    }
    // Display the form.
    orderForm.Show(); 
    orderForm.Activate();
}

If you want the form to be created only the first time, and then show that same form the next time the menu item is selected, something like this could work:

private Lordre orderForm = null;
private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (orderForm == null)
        orderForm = new Lordre(ClientId);
        // Set the Parent Form of the Child window.
        orderForm .MdiParent = this;

    }
    // Display the form.
    orderForm.Show(); 
    orderForm.Activate();
}
月隐月明月朦胧 2024-12-06 05:55:00

也许是这样的:

public class MyForm
{
    private Window _openedWindow;
    private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
    {

        if ( _openedWindow != null &&  _openedWindow.Open)
        {
            //
        }
        else
        {
            Lordre newMDIChild = new Lordre(ClientId);
            _openedWindow = newMDIChild;
            // Set the Parent Form of the Child window.
            newMDIChild.MdiParent = this;
            // Display the new form.
            newMDIChild.Show();                
        }
    }
}

这完全是在浏览器中编写的,我已经很长时间没有编写Windows应用程序了,所以确切的类和属性可能会有所不同。

Maybe something like this:

public class MyForm
{
    private Window _openedWindow;
    private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
    {

        if ( _openedWindow != null &&  _openedWindow.Open)
        {
            //
        }
        else
        {
            Lordre newMDIChild = new Lordre(ClientId);
            _openedWindow = newMDIChild;
            // Set the Parent Form of the Child window.
            newMDIChild.MdiParent = this;
            // Display the new form.
            newMDIChild.Show();                
        }
    }
}

This was written entirely in the browser and I haven't written a windows app for a long time, so the exact classes and properties may be different.

懒猫 2024-12-06 05:55:00

我通常处理单实例表单的方式就是用一个成员变量来保存它,然后检查它是否为空。

因此,有一个成员变量:

private TestForm myTestForm = null;

然后当您检查时只需检查它是否为 null;如果没有,当您创建表单时,将其分配给您的成员变量,并附加到子表单关闭事件的事件处理程序。

if (myTestForm != null)
{
   MessageBox.ShowDialog("Sorry, you already have a TestForm open!");
}
else
{
   myTestForm = new TestForm();
   myTestForm.FormClosing += myTestForm_FormClosing;
   myTestForm.MdiParent = this;
   myTestForm.Show();
}

在关闭处理程序中,只需将其设置回 null 即可。

private void myTestForm_FormClosing(Object sender, FormClosingEventArgs e)
{
   myTestForm = null;
}

另外,我做了一些搜索,您可以将条件更改为:

if ((myTestForm != null) && (!myTestForm.IsDisposed())

The way I usually handle single instance forms is just to have a member variable to hold it, and then check to see whether it is null.

so, have a member variable:

private TestForm myTestForm = null;

and then when you are checking just check whether it's null; if not, when you create your form assign it to your member variable and attach to the event handler for the closing event of the child form.

if (myTestForm != null)
{
   MessageBox.ShowDialog("Sorry, you already have a TestForm open!");
}
else
{
   myTestForm = new TestForm();
   myTestForm.FormClosing += myTestForm_FormClosing;
   myTestForm.MdiParent = this;
   myTestForm.Show();
}

and in the closing handler, just set it back null.

private void myTestForm_FormClosing(Object sender, FormClosingEventArgs e)
{
   myTestForm = null;
}

also, I did a bit of searching and rather than having the FormClosing event and handler, you can just change your conditional to be:

if ((myTestForm != null) && (!myTestForm.IsDisposed())
挽清梦 2024-12-06 05:55:00

感谢大家的回复。

我发现这

private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
    {
        // a flag to store if the child form is opened or not
        bool found = false;   
        // get all of the MDI children in an array
        Form[] charr = this.MdiChildren;

        if (charr.Length == 0)     // no child form is opened
        {
            Lordre myPatients = new Lordre();
            myPatients.MdiParent = this;
            // The StartPosition property is essential
            // for the location property to work
            myPatients.StartPosition = FormStartPosition.Manual;
            myPatients.Location = new Point(0,0);
            myPatients.Show();
        }
        else     // child forms are opened
        {
            foreach (Form chform in charr)
            {
                if (chform.Tag.ToString() == "Ordre")  // one instance of the form is already opened
                {
                    chform.Activate();
                    found = true;
                    break;   // exit loop
                }
                else
                    found = false;      // make sure flag is set to false if the form is not found
            }

            if (found == false)    
            {
                Lordre myPatients = new Lordre();
                myPatients.MdiParent = this;
                // The StartPosition property is essential
                // for the location property to work
                myPatients.StartPosition = FormStartPosition.Manual;
                myPatients.Location = new Point(0,0);
                myPatients.Show();
            }
        }  
    }

就是我想要的,但是代码太多了。我想知道是否可以减少它。

我必须将这个添加到我的每个脱衣舞菜单中。

if (chform.Tag.ToString() == "Ordre")

if (chform.Tag.ToString() == "Another one")

Thanks you all for your response.

i have found this one

private void ordresToolStripMenuItem_Click(object sender, EventArgs e)
    {
        // a flag to store if the child form is opened or not
        bool found = false;   
        // get all of the MDI children in an array
        Form[] charr = this.MdiChildren;

        if (charr.Length == 0)     // no child form is opened
        {
            Lordre myPatients = new Lordre();
            myPatients.MdiParent = this;
            // The StartPosition property is essential
            // for the location property to work
            myPatients.StartPosition = FormStartPosition.Manual;
            myPatients.Location = new Point(0,0);
            myPatients.Show();
        }
        else     // child forms are opened
        {
            foreach (Form chform in charr)
            {
                if (chform.Tag.ToString() == "Ordre")  // one instance of the form is already opened
                {
                    chform.Activate();
                    found = true;
                    break;   // exit loop
                }
                else
                    found = false;      // make sure flag is set to false if the form is not found
            }

            if (found == false)    
            {
                Lordre myPatients = new Lordre();
                myPatients.MdiParent = this;
                // The StartPosition property is essential
                // for the location property to work
                myPatients.StartPosition = FormStartPosition.Manual;
                myPatients.Location = new Point(0,0);
                myPatients.Show();
            }
        }  
    }

it is what i want, but it is too much code. i wonder if i can reduce it.

i have to make this to each of my stripmenu.

if (chform.Tag.ToString() == "Ordre")

if (chform.Tag.ToString() == "Another one")
云胡 2024-12-06 05:55:00

我这样做的方法是首先将屏幕存储在类中的变量中,如下所示:

private Lordre _LordreChildForm = new Lordre(ClientID)

然后为其创建一个属性,如下所示:

public Lordre LordreChildForm { get => _LordreChildForm; set => _LordreChildForm = 
value; }

然后在表单的 Form Closing 事件上将值设置为 null,如下所示:

private void Lordre_FormClosing(object sender, FormClosingEventArgs e)
{
            ClassName.LordreChildForm= null;
}

现在最后您可以设置一个按钮单击事件处理程序中的 if 语句如下:

private void LordreToolStripMenuItem_Click(object sender, EventArgs e)

{
    if(ClassName.LordreChildForm== null || ClassName.LordreChildForm.IsDisposed)
    {
        ClassName.LordreChildForm= new DeregisterClub();
        ClassName.LordreChildForm.MdiParent = this;
    }
    LordreChildForm.Dock = DockStyle.Fill;
    LordreChildForm.Show();
    LordreChildForm.Focus();
}

The way I do it is by first storing the screen in a variable in a class like so:

private Lordre _LordreChildForm = new Lordre(ClientID)

Then make a property for it like so:

public Lordre LordreChildForm { get => _LordreChildForm; set => _LordreChildForm = 
value; }

Then on the form's Form Closing event set the value to null like so:

private void Lordre_FormClosing(object sender, FormClosingEventArgs e)
{
            ClassName.LordreChildForm= null;
}

Now Finally you can set an if statement in the button click event handler like so:

private void LordreToolStripMenuItem_Click(object sender, EventArgs e)

{
    if(ClassName.LordreChildForm== null || ClassName.LordreChildForm.IsDisposed)
    {
        ClassName.LordreChildForm= new DeregisterClub();
        ClassName.LordreChildForm.MdiParent = this;
    }
    LordreChildForm.Dock = DockStyle.Fill;
    LordreChildForm.Show();
    LordreChildForm.Focus();
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文