Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不将表单隐藏在VisualStudio2010中的情况下,将一种表单优先于另一种表单?_C#_Forms_Visual Studio 2010_Visual Studio 2012_Crystal Reports - Fatal编程技术网

C# 如何在不将表单隐藏在VisualStudio2010中的情况下,将一种表单优先于另一种表单?

C# 如何在不将表单隐藏在VisualStudio2010中的情况下,将一种表单优先于另一种表单?,c#,forms,visual-studio-2010,visual-studio-2012,crystal-reports,C#,Forms,Visual Studio 2010,Visual Studio 2012,Crystal Reports,我一直在试图找到一种方法来禁用一个表单,并将另一个表单放在它前面,作为来自SQL Server的更新命令的接收方。我唯一的问题是。。。我的主要形态看起来很简单,我宁愿保持这种状态。我有两个展品,因为我还不能在这个州张贴照片。。。但我会更新,让更多人理解 附件1:我的病历表有几个按钮,包括插入、更新、删除、通过Crystal Report查看、打印、搜索和返回按钮。还有一个listview对象占据了表单的大部分 附件2:我的更新表单由7个文本框组成:6个包含基本信息,另一个包含默认只读的用户全名。

我一直在试图找到一种方法来禁用一个表单,并将另一个表单放在它前面,作为来自SQL Server的更新命令的接收方。我唯一的问题是。。。我的主要形态看起来很简单,我宁愿保持这种状态。我有两个展品,因为我还不能在这个州张贴照片。。。但我会更新,让更多人理解

附件1:我的病历表有几个按钮,包括插入更新删除通过Crystal Report查看打印搜索返回按钮。还有一个listview对象占据了表单的大部分

附件2:我的更新表单由7个文本框组成:6个包含基本信息,另一个包含默认只读的用户全名。表单中还有两个按钮,UPDATEBack。标签放置在基本信息文本框上方,表示要输入的用户信息

我的问题是:如何禁用所有按钮和列表视图(即附件1的形式),并将附件2放在上面,而不隐藏附件1?

要澄清的是,附件1一旦打开(这是我的目标),只要附件2在适当的位置,就不能访问它。我试图找到一种方法,将更新表单置于病历表单之上,但不幸的是,一旦两个表单同时打开,我就会一直看到病历表单可以单击。请帮帮我。。。我只是一名学生,在VisualStudio2010中掌握了一些诀窍,但我想问一下是否有人知道


对于那些愿意回答的人。。。谢谢。:)这是我的第一篇帖子。。。因此,请耐心等待……

下面是一个示例,它使用主窗体
mainForm
和按钮
cbu update
打开第二个窗体
updateForm
。打开时,第二个窗体将自身置于第一个窗体之上,并禁用第一个窗体的所有控件。当它关闭时,它隐藏自己并重新启用第一个窗体的所有控件

注意:两个表单都相互引用,因此它们可以与其他表单的所有(公共)部分一起使用。(如果需要,您可以随时公开控件!)。一个参考文件不能打开,另一个提交给构造函数

使用
控件
集合和
表单
也是
控件这一事实递归地启用或禁用控件。以下是第一张表格的代码:

public partial class mainForm : Form
{

    updateForm Uform;

    private void cb_update_Click(object sender, EventArgs e)
    {
        if (Uform == null)  Uform = new updateForm(this);
        Uform.Show();
    }
}
这里是第二条:

public partial class updateForm : Form
{

    mainForm main_Form;

    public updateForm(mainForm main)
    {
        InitializeComponent();
        main_Form = main;
    }

    private void updateForm_Shown(object sender, EventArgs e)
    {
        this.Size = main_Form.Size;
        this.Location = main_Form.Location;
        //*1*
        setControlState(main_Form, false);
    }

    private void cb_back_Click(object sender, EventArgs e)
    {
        setControlState(main_Form, true);
        this.Hide();
    }

    private void updateForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        setControlState(main_Form, true);
        this.Hide();
    }

    //*2*
    public void setControlState(Control Ctl, bool enabled)
    {
        //*3*
        foreach (Control c in Ctl.Controls) setControlState(c, enabled);
        Ctl.Enabled = enabled;
        //*4*
    }
}
编辑:此代码假定主窗体上的所有控件最初都已启用。如果情况并非如此,例外列表将处理该问题,添加四行代码:

exceptions.Clear();  //*1*
List<Control> exceptions = new List<Control>(); //*2*
if (!enabled && !Ctl.Enabled) exceptions.Add(Ctl);  //*3*
if (enabled && exceptions.Contains(Ctl)) Ctl.Enabled = false;  //*4*
exceptions.Clear()//*1*
列表异常=新列表()//*2*
如果(!enabled&!Ctl.enabled)异常,则添加(Ctl)//*3*
if(enabled&&exceptions.Contains(Ctl))Ctl.enabled=false//*4*

编辑2:我仍然不太清楚您所说的“将附件2放在上面,而不隐藏附件1”是什么意思。如果您的意思是“将它放置在上方而不隐藏它”,那么一两行代码将有一点不同。。请解释

没错!谢谢你的提醒!我想把第二张表格放在第一张表格上,确保第一张表格不被访问,除非第二张表格关闭。我不知道他们不一样,所以再次谢谢你!(男孩,我需要一点练习…)不管怎样,你说我必须公开这两种形式?你说我必须公开这两种形式?如果要访问form1(禁用它),form2需要对其进行引用;但不是公开的。如果您想直接访问另一个窗体上的控件,它应该是公共的。您是否意味着在form2能够访问它之前,form1上的控件应该首先是公共的?还是相反?是的,是的。默认情况下,您放置在表单上的所有
控件都是私有的。因此,如果要设置,请使用另一种形式的标签
Status.Text
,您必须首先在designer.cs文件中将其公开;或者您可以通过表单的(公共)控件集合属性访问它,如下所示:
otherform.Controls[“Status”]。Text=“done”我能做什么来在表单中公开控件?