簡體   English   中英

主要形式的新形式

[英]A new form in a main form

在C#表單中,我需要代碼將第二個表單添加到現有表單中。 這是我嘗試過的:

第一種形式:

public partial class frmMain : Form
{
    public frmMain()
    {
        InitializeComponent();
    }
    private void frmMain_Load(object sender, EventArgs e)
    {
        frmMain fM = new frmMain();
        fM.KeyPress += new KeyPressEventHandler(MMForm);

    }
    private void MMForm(object sender, KeyPressEventArgs e)
    {
        Keys KP; KP = (Keys)sender;
        if (KP == Keys.Escape) { frm2 fM2 = new frm2(); fM2.Show(); }

    }
}

這是第二種形式:

public class frm2 : Form
{
    public frm2()
    {
        frm2 fM2 = new frm2();
        fM2.Height = 200; fM2.Width = 200;
        Controls.AddRange(new System.Windows.Forms.Form[] { fM2 });
    }

}

我想念什么?

編輯:暫時忘記所有這些。 即使我按照下面的建議進行操作,當我按該鍵時也會出現錯誤。

An unhandled exception of type 'System.InvalidCastException' occurred in Project 09.exe
Additional information: Specified cast is not valid.
private void frmMain_Load(object sender, EventArgs e)
{
    frmMain fM = new frmMain();
    fM.KeyPress += new KeyPressEventHandler(MMForm);

}

替換為:

private void frmMain_Load(object sender, EventArgs e)
{
    this.KeyPress += new KeyPressEventHandler(MMForm);
}

或者您也可以通過設計器直接注冊到MMForm,從而注冊到自己的KeyPress。

而且,也不清楚您要在這里做什么:

public frm2()
{
    frm2 fM2 = new frm2();
    fM2.Height = 200; fM2.Width = 200;
    Controls.AddRange(new System.Windows.Forms.Form[] { fM2 });
}

它可能看起來應該像這樣:

public frm2()
{
    InitializeComponents();
    this.Height = 200;
    this.Width = 200;
}

即使您不想初始化InitialComponents,也應該編輯自己的(this)屬性,而不是新的frm2屬性。 創建新的frmMain並訂閱它的KeyPress時,在frmMain_Load中遇到了同樣的問題,而實際上您應該訂閱自己的KeyPress。

此外,您可以縮短MMForm只是為了美化,如下所示:

private void MMForm(object sender, KeyPressEventArgs e)
{
    if ((Keys)sender == Keys.Escape)
    {
        new frm2().Show();
    }
}
  1. frm2不使用InitializeComponent()命令。 因此將其添加到您的代碼中。
  2. 其次,您嘗試向其自身添加frm2對象,因此它將無法正常工作。

您應該為退出的表單使用代碼belove(如果您不調整表單大小,請從屬性中設置其權重。

public class frm2 : Form 
{ 
    public frm2() 
    {  
        InitializeComponent(); ,
        this.Width = 200; this.Height = 200; 
    } 
} 

在特殊鍵之后,如果要顯示frm2:

frm2 secondFrom = new frm2();
frm2.Show(); // frm2.ShowDialog(); works too but they are working differently.

您可以這樣做:

public partial class frmMain : Form
{
    public frmMain()
    {
        InitializeComponent();
    }
    private void frmMain_Load(object sender, EventArgs e)
    {
        this.private void MMForm(object sender, KeyPressEventArgs e)
    }
    private void MMForm(object sender, KeyPressEventArgs e)
     {
        if (e.KeyChar == Convert.ToChar(((int)Keys.Escape)))
        {
            frm2 fM2 = new frm2(); fm2.Height=200; fm2.Width=200; fM2.Show(); 
        }
}

public class frm2 : Form 
{ 
    public frm2() 
    {  
        InitializeComponent();
    } 
} 

如果您試圖在主窗體上按退出鍵時打開frm2,請執行以下操作:

public frmMain()
    {
        InitializeComponent();
        this.KeyPress += new KeyPressEventHandler(MMForm);
    }
//You don't need to put anything in form load
    private void frmMain_Load(object sender, EventArgs e)
    {
    }

//This is fine
    private void MMForm(object sender, KeyPressEventArgs e)
    {
        Keys KP; KP = (Keys)sender;
        if (KP == Keys.Escape) { frm2 fM2 = new frm2(); fM2.Show(); }
    }

在frm2中執行:

public class frm2 : Form
{
    public frm2()
    {
        InitializeComponent();
        this.Height = 200; this.Width = 200;
        Controls.AddRange(new System.Windows.Forms.Form[] { fM2 });
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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