我对C#很新。
以下是我尝试在代码中创建表单和容器的代码;但我遇到了问题。
Windows Forms Application
模板开始。Program.cs
文件,以便我能够动态创建FormMain
。Container.Add(BtnClose)
中的行BtnClose_Setup()
和FormMain.cs
时,代码会编译并运行。但是,该计划仍有一些奇怪的结果。(a)表格FormMain
应该出现在(20,20)(左上角),如FormMain_Setup
所说;但是当我运行应用程序时,虽然宽度和宽度高度设置按预期显示(800,600),左上角每次都会更改(不会粘到20,20)。
(b)esc键按预期工作并关闭表单和应用程序。
Container.Add(BtnClose)
中的行BtnClose_Setup()
和FormMain.cs
评论时,代码会编译,但VS会在运行时向我发送消息:" 未处理的类型' System.TypeInitializationException'发生在mscorlib.dll " 有人能告诉我我做错了吗?
Program.cs
档案:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace test {
static class Program {
public static FormMain FormMain = new FormMain();
[STAThread]
static void Main() {
Application.Run(FormMain);
}
}
}
FormMain.cs
档案:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace test {
public partial class FormMain : Form {
Button BtnClose = new Button();
public void BtnClose_Setup() {
BtnClose.Text = "Ok";
BtnClose.Top = 500;
BtnClose.Left = 700;
}
public void FormMain_Setup() {
Top = 20;
Left = 20;
Width = 800;
Height = 600;
KeyDown += FormMain_KeyDown;
//Container.Add(BtnClose);
//BtnClose_Setup();
}
void FormMain_KeyDown(object sender, KeyEventArgs e) {
if(e.KeyCode == Keys.Escape) {
Close();
}
}
public FormMain() {
InitializeComponent();
FormMain_Setup();
}
}
}
答案 0 :(得分:2)
致电Controls.Add(BtnClose);
而非Container.Add(BtnClose);
。
至于修复表格位置:设置StartPosition = FormStartPosition.Manual;
属性。
要在Esc上正确关闭表单,请覆盖ProcessCmdKey
方法:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Escape)
{
Close();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
答案 1 :(得分:1)
默认情况下,表单StartPosition设置为WindowsDefaultLocation。您需要将其设置为手动;无论是在设计师还是在代码中。
要向表单添加控件,您需要将其添加到表单的控件集合中,而不是容器。
此外,如果您希望表单在添加按钮后继续获取KeyDown事件,则需要将KeyPreview设置为true。
public void FormMain_Setup()
{
StartPosition = FormStartPosition.Manual;
KeyPreview = true;
Top = 20;
Left = 20;
Width = 800;
Height = 600;
KeyDown += FormMain_KeyDown;
Controls.Add(BtnClose);
BtnClose_Setup();
}