如何使用windows窗体使用同一事件的多个窗体
本文关键字:窗体 事件 何使用 windows | 更新日期: 2023-09-27 18:26:26
我在SO pt上问了同样的问题,但似乎没有人理解这个问题,尽管我说得很清楚。
我有一张表格,我将用于
- 在数据库中注册客户
- 更改任何寄存器
- 显示寄存器
我在这里实例化这个表单:
private void mnuRegister_Click(object sender, EventArgs e)
{
var frmRegister = new frmRegisterScreen();
frmRegister.Show();
}
正如您所看到的,我从一个名为mnuRegister
的ToolStripMenuItem
中调用该表单。
现在,我正在Load`事件中自定义该表单中的许多属性,这将使其更适合注册客户。
以下是代码:
private void frmRegisterScreen_Load(object sender, EventArgs e)
{
//set the database connection and the Sql command to be used
string conString = "Server = .''sqlexpress; trusted_connection = yes; database=he_dados;";
SqlConnection con = new SqlConnection(conString);
string sel = "SET DATEFORMAT dmy;'n" //set date format to dd//mm/yyyy
+ "Insert into Customer(" +
"Name,IDCard,Phone,Address,Observation)" +
"values(" +
"'" + txtName.Text +
"','" + mskIDCard.Text +
"','" + mskPhone.Text +
"','" + txtAddress.Text +
"','" + txtObs.Text + "');";
SqlCommand selCmd = new SqlCommand(sel, con);
//set the form properties relate to the customer registration
lblMain.Text = "Register Customer";
tsbSave.Text = "Save Changes";
}
正如您所看到的,这段代码显然是为了在表中插入数据。
现在,我想做的是调用这种形式的另一个实例:
private void mnuViewRegister_Click(object sender, EventArgs e)
{
var frmViewRegister = new frmRegisterScreen();
frmViewRegister.Show();
}
然后我想设置特定的属性,这是我使用相同表单进行简单查询所必需的,例如:
private void frmRegisterScreen_Load(object sender, EventArgs e)
{
//set the database connection and the Sql command to be used
string conString = "Server = .''sqlexpress; trusted_connection = yes; database=he_dados;";
SqlConnection con = new SqlConnection(conString);
string sel = "Select * from Customer;";
SqlCommand selCmd = new SqlCommand(sel, con);
//set the form properties relate to the customer registration
lblMain.Text = "View Customer Registers";
tsbSave.Text = "View";
}
换句话说,我希望有特定于表单实例的事件调用,而不是有一个对任何实例都有效的事件。
这可能吗?
如果您发现自己配置了大量的UI元素,那么只需创建单独的Forms。它们不会花你任何钱,而且更容易维护。但看起来你只更改了几个UI元素(比如标签),所以这还不错。
将配置逻辑移动到Form上的两个独立方法中,如ConfigureForRegistration
和ConfigureForViewingRegistration
,然后在实例化Form时调用适当的方法:
var frmRegister = new frmRegisterScreen();
frmRegister.ConfigureForRegistration();
frmRegister.Show();
或者,您可以为每个可能的视图创建一个枚举,并在实例化Form:时传入一个值
public enum ScreenOption
{
Register,
AlterRegister,
ViewRegister
}
public class frmRegisterScreen
{
public frmRegisterScreen(ScreenOption option)
{
switch (option)
{
case ScreenOption.ViewRegister:
//set the database connection and the Sql command to be used
string conString = "Server = .''sqlexpress; trusted_connection = yes; database=he_dados;";
SqlConnection con = new SqlConnection(conString);
break;
...
}
}
}
var frmRegister = new frmRegisterScreen(ScreenOption.ViewRegister);
frmRegister.Show();