2012-04-22 3 views
0

в формах 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 }); 
    } 

} 

Что мне не хватает?

EDIT: забудьте об этом на мгновение. Даже если я сделаю это, как было предложено там, я получаю сообщение об ошибке, когда я нажимаю клавишу.

An unhandled exception of type 'System.InvalidCastException' occurred in Project 09.exe 
Additional information: Specified cast is not valid. 
+0

чем проблема? –

+0

, вы можете установить высоту и ширину, используя это. если вы хотите установить его для текущего экземпляра.Я немного запутался из-за этого нового объекта создания frm2 внутри конструктора. – ninja

+0

Что вы пытаетесь сделать здесь, вы хотите запустить frm2 при нажатии клавиши Escape на основной форме? – Habib

ответ

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

treid, не могу написать InitializeComponent(); Во второй форме –

+0

У меня была дополнительная запятая в InitializeComponent() второй формы, просто удалила ее. – ninja

+0

Нет, это немного по-другому, посмотрите на комментарии к другим ответам –

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_Load, когда вы создали новую frmMain и подписались на ее KeyPress, когда действительно вы должны были подписаться на свой собственный KeyPress.

Кроме того, вы можете сократить свой MMForm просто украсить, например, так:

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

это ... не работает. –

+0

После или до редактирования? – SimpleVar

+0

Оба, я имею в виду, что нет никаких проблем при выполнении программы, это просто, что он ничего не делает. –

1
  1. frm2 не использует команду InitializeComponent(). поэтому добавьте его в свой код.
  2. Во-вторых, вы пытаетесь добавить объект frm2 к себе, поэтому он не будет работать.

вы должны использовать код Белове для выходящей формы (и установите, пожалуйста, его вес от свойств, если не будет изменять форму.

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. 
+0

hmmm. проблема в том, что и form1 и 2 находятся на одной странице кода, я пытаюсь создать другую форму в первой. –

+1

Возможно, вы должны прочитать о MDI (MDIChild и MDIParent). MDI - это то, где дочерняя форма на самом деле является частью родительской формы. Формы полностью разделены по коду, но основная форма определяется как MDIParent. – SimpleVar

+0

, вы должны добавить свою форму из решения. щелкните правой кнопкой мыши по решению, добавьте новую форму окна. поэтому файл designer.cs и другие необходимые части будут готовы для вас. – icaptan

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

} 
+0

Я действительно пытаюсь открыть новую форму в коде первого. не добавили вторую форму в решение или что-нибудь –

+0

@AntonioTehSumtin, значит, вы имеете в виду, что frm2 не в решении ??? Я не думаю, что вы сможете это сделать так, почему вы не добавляете его в решение. – Habib

+0

Тестирование: P –

Смежные вопросы