簡體   English   中英

如何在不將其隱藏在Visual Studio 2010中的情況下優先處理一種表單?

[英]How can I prioritize one form over another without hiding it in Visual Studio 2010?

我一直試圖找到一種禁用表單的方法,並在其前面放置另一個表單,以充當來自SQL Server的update命令的接收方。 我唯一的問題是...我的主要表單的外觀似乎很簡單,我寧願這樣。 我有兩個展覽,因為我還不能在這種狀態下發布圖片...但是我會更新,以便更多人了解。

圖表1 :我的病歷表有幾個按鈕,包括INSERTUPDATEDELETE ,Crystal Report 查看PrintSearchBack按鈕。 還有一個listview對象放置在大多數表單中。

圖表2 :我的UPDATE表單由7個文本框組成:6個包含基本信息,一個包含用戶全名,默認情況下為只讀。 表單中還有兩個按鈕UPDATEBack 標簽放置在基本信息文本框上方,以表示要輸入的用戶信息。

這是我的問題: 我將如何禁用所有按鈕和列表視圖 (這是附件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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM