C# 如何在不将表单隐藏在VisualStudio2010中的情况下,将一种表单优先于另一种表单?
我一直在试图找到一种方法来禁用一个表单,并将另一个表单放在它前面,作为来自SQL Server的更新命令的接收方。我唯一的问题是。。。我的主要形态看起来很简单,我宁愿保持这种状态。我有两个展品,因为我还不能在这个州张贴照片。。。但我会更新,让更多人理解 附件1:我的病历表有几个按钮,包括插入、更新、删除、通过Crystal Report查看、打印、搜索和返回按钮。还有一个listview对象占据了表单的大部分 附件2:我的更新表单由7个文本框组成:6个包含基本信息,另一个包含默认只读的用户全名。表单中还有两个按钮,UPDATE和Back。标签放置在基本信息文本框上方,表示要输入的用户信息 我的问题是:如何禁用所有按钮和列表视图(即附件1的形式),并将附件2放在上面,而不隐藏附件1? 要澄清的是,附件1一旦打开(这是我的目标),只要附件2在适当的位置,就不能访问它。我试图找到一种方法,将更新表单置于病历表单之上,但不幸的是,一旦两个表单同时打开,我就会一直看到病历表单可以单击。请帮帮我。。。我只是一名学生,在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个包含基本信息,另一个包含默认只读的用户全名。
对于那些愿意回答的人。。。谢谢。:)这是我的第一篇帖子。。。因此,请耐心等待……下面是一个示例,它使用主窗体
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”代码>我能做什么来在表单中公开控件?