0

C#フォームでは、既存のフォームに2番目のフォームを追加するためのコードが必要です。これは私が試したことです:

最初の形式:

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(); }

    }
}

そしてこれは2番目の形式です:

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.
4

4 に答える 4

1

あなたはこれを行うことができます:

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();
    } 
} 
于 2012-04-22T15:10:44.397 に答える
1

メイン フォームでエスケープ キーが押されたときに 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 });
    }

}
于 2012-04-22T15:14:45.187 に答える
1
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);
}

または、デザイナーを介して独自の KeyPress に登録し、MMForm に直接登録することもできます...

また、ここで何をしようとしているのかは不明です。

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;
}

InitializeComponents を使用したくない場合でも、新しい frm2 プロパティではなく、独自の (この) プロパティを編集する必要があります。新しいfrmMainを作成し、実際には独自のKeyPressを購読する必要があるときに、そのKeyPressを購読したときに、frmMain_Loadで同じ問題が発生しました。

また、次のように、美しくするためだけに MMForm を短くすることもできます。

private void MMForm(object sender, KeyPressEventArgs e)
{
    if ((Keys)sender == Keys.Escape)
    {
        new frm2().Show();
    }
}
于 2012-04-22T15:02:14.477 に答える
1
  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.
于 2012-04-22T15:03:57.237 に答える