我有两种形式(Form1
和Form2
)。
Form1
有一些其他控件,在填写完所有字段后保存到数据库中。它还有一个DELETE按钮,您可以从数据库中删除搜索到的信息,并且它具有"可用房间"按钮,单击该按钮将加载Form2
。
Form2
有许多按钮(未占用的房间),我可以从中选择。现在,我的问题是当我点击"可用房间"时,如何在Form2
上禁用所选按钮(例如:101)。第二次或任何其他日子,并且在Form2
下次加载等时禁用任何其他所选按钮(例如:102)。
为了清楚说明,我唯一希望Form2
上的禁用按钮处于活动状态,就是当我单击Form1上的DELETE按钮时。但是,这个我做了。
答案 0 :(得分:1)
当您启动新的Form2时,保存表单变量并使用它来访问其值。您应该能够访问Form2上按钮的button.Enabled
属性。
这是您在Form1上的代码
Form2 secondForm;
private void button_Clicked (object sender, EventArgs e)
{
if (secondForm != null)
{
secondForm.yourButton.Enabled = true;
}
// Any other code you want to handle
}
private void Form2_Closing (object sender, EventArgs e)
{
secondForm = null;
}
这就是每次打开/显示Form2时应该做的事情:
secondForm = new Form2();
secondForm.Show();
secondForm.Closing += new System.EventHandler(Form2_Closing);
编辑:谢谢Hans Passant!忘了。如果表单已关闭,您还应将secondForm
的值设置为null。编辑了上面的代码。
答案 1 :(得分:0)
使用表单加载事件 - https://msdn.microsoft.com/en-us/library/system.windows.forms.form.load(v=vs.110).aspx
加载表单2时,请阅读数据库。您已经知道需要禁用房间按钮的情况。例如,为简单起见,我们假设您可以将数据库的列读入c#boolean(例如unAvailable),并根据该值确定房间是否可用。所以在你的表单2加载(处理表单加载事件)时,需要有一个像 -
这样的条件Form_Load(System.Object sender,
System.EventArgs e)
{
roomButton.Enabled = unAvailable;
}
因此,根据字段unAvailabled的值,启用或禁用roomButton。
答案 2 :(得分:0)
我必须说谢谢你上面的所有评论和答案。通过它们,我开始思考,特别是使用Form2上的Form_Load事件进行思考,当它发生时,它就像一个魅力!!!!。
我在Form2_Load事件中所做的就是读取数据库中的Apartment_No列(根据建议的一个贡献者),并使用每个值来使用switch ... case来禁用相应的按钮。
以下是代码:
private void Form2_Load(object sender, EventArgs e)
{
string constr = @"Data Source=DESKTOP-J6KRI77\SQLEXPRESS; Initial Catalog = SELLnBUY; Integrated Security = true";
string cmdstr = "SELECT Apartment_No FROM Apartment";
SqlConnection con = new SqlConnection(constr);
SqlCommand com = new SqlCommand(cmdstr, con);
con.Open();
SqlDataReader r = com.ExecuteReader();
while (r.Read())
{
int room = int.Parse(r["Apartment_No"].ToString());
switch(room)
{
case 101:
button1.Enabled = false;
break;
case 102:
button2.Enabled = false;
break;
case 103:
button3.Enabled = false;
break;
case 104:
button4.Enabled = false;
break;
}
}
con.Close();