[英]How can I prioritize one form over another without hiding it in Visual Studio 2010?
我一直試圖找到一種禁用表單的方法,並在其前面放置另一個表單,以充當來自SQL Server的update命令的接收方。 我唯一的問題是...我的主要表單的外觀似乎很簡單,我寧願這樣。 我有兩個展覽,因為我還不能在這種狀態下發布圖片...但是我會更新,以便更多人了解。
圖表1 :我的病歷表有幾個按鈕,包括INSERT , UPDATE , DELETE ,Crystal Report 查看 , Print , Search和Back按鈕。 還有一個listview對象放置在大多數表單中。
圖表2 :我的UPDATE表單由7個文本框組成:6個包含基本信息,一個包含用戶全名,默認情況下為只讀。 表單中還有兩個按鈕UPDATE和Back 。 標簽放置在基本信息文本框上方,以表示要輸入的用戶信息。
這是我的問題: 我將如何禁用所有按鈕和列表視圖 (這是附件1的形式), 並將附件2置於其上,而又不隱藏附件1?
需要說明的是,只要打開了展覽2,就無法訪問展覽1(這是我的目標)。 我試圖找到一種將“更新”表單放在“病歷”表單上的方法,但是不幸的是,一旦兩者同時打開,我總是看到“病歷”表單是可單擊的。 請幫幫我...我只是一個在Visual Studio 2010中掌握各種知識的學生,但是我想問問是否有人知道。
對於那些會回答的人...謝謝。 :)這是我的第一篇文章...所以請耐心等待...
這是一個使用主窗體mainForm
和按鈕cb_update
打開第二個窗體updateForm
。 打開后,第二個窗體將自己置於第一個窗體上,並禁用第一個窗體的所有控件。 當它關閉時,它會隱藏自身並重新啟用第一種形式的所有控件。
注意:兩種形式都互相引用,因此它們可以與另一種形式的所有(公共)部分一起使用。 (如果需要,可以隨時將控件公開!)。 禁止打開一個引用,將另一個提交給構造函數。
使用Controls
集合以及Form
也是Control
的事實來遞歸地啟用或禁用控件。 這是第一種形式的代碼:
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*
}
}
編輯:此代碼假定main_form上的所有控件都已初始啟用。 如果不是這種情況,則例外列表將解決這一問題,並添加四行代碼:
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*
編輯2:我還是不太確定,您所說的“將附件2放在上面,而不隱藏附件1”是什么意思。 如果你的意思是“代替它上面沒有隱藏它” 1個或2行的代碼會有點不同。請解釋!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.