我正在研究c#WinForms中的原型项目,该项目有3种形式,如下所示:
1-MasterForm 2-Layout 3-UpdateLayout 我的数据库中也有一个表,该表只有2列一个用于layout_no,另一个用于layout_status。如果布局繁忙,我需要将其颜色更改为红色,如果不忙,我会将其保持为绿色。
我将布局更新为忙后的问题是,它不会在MasterForm
中刷新。
这是我的UpdateLayout
表格代码:
public void refreshLayout()
{
try
{
using (SQLiteConnection con = new SQLiteConnection(ConnectToDB))
{
con.Open();
using (SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT layout_no, is_busy FROM layout_table", con))
{
DataTable dt = new DataTable();
da.Fill(dt);
int totalrows = dt.Rows.Count;
for (int i = 0; i < totalrows; i++)
{
int status = Convert.ToInt32(dt.Rows[i]["is_busy"]);
Button ButtonAllLayout = new Button();
ButtonAllLayout.Name = "Layout'" + (i + 1) + "'";
ButtonAllLayout.Text = dt.Rows[i]["Layout_no"].ToString();
styleButton();//apply the button location...etc
this.Controls.Add(ButtonAllLayout);
if (status == 1)
{
ButtonAllLayout.BackColor = Color.Red;
}
else
{
ButtonAllLayout.BackColor = Color.YellowGreen;
}
}
}
}
}
catch (Exception)
{
throw;
}
}
private void button1_Click(object sender, EventArgs e)
{
refreshLayout();
}
这是我MasterForm
的代码:
public MasterForm()
{
InitializeComponent();
}
private void BtnLayout_Click(object sender, EventArgs e)
{
Layout l1 = new Layout();
l1.refreshLayout();
splitContainerMain.Panel2.Show();
splitContainerMain.Panel2.Controls.Add(l1);
l1.Show();
}
private void BtnSetting_Click(object sender, EventArgs e)
{
Settings s1 = new Layout();
splitContainerMain.Panel2.Show();
splitContainerMain.Panel2.Controls.Add(s1);
s1.Show();
}
private void BtnMain_Click(object sender, EventArgs e)
{
Main m1 = new Main();
splitContainerMain.Panel2.Show();
splitContainerMain.Panel2.Controls.Add(m1);
m1.Show();
}
你能指导我怎么做吗?
提前致谢。
答案 0 :(得分:1)
首先,您应该为UpdateLayout表单提供父信息
UpdateLayout frm = new UpdateLayout();
frm.Owner = this; //Layout form
frm.Show();
之后,您可以调用布局表单的公共refreshLayout方法,
private void button1_Click(object sender, EventArgs e)
{
(this.Owner as UpdateLayout).refreshLayout();
}
您还需要清除之前创建的按钮
在refreshLayout方法的开头
this.Controls.Clear();
或者实现除refreshLayout之外的新方法以仅更改已更改按钮的backColor
答案 1 :(得分:0)
据我所知,您的按钮全部添加了尺寸(0,0)和位置(0,0)。所以我认为它们在那里,但由于尺寸和位置而根本不可见。
尝试添加以下内容:
caffe io
答案 2 :(得分:0)
要将自定义BackColor
应用于您的按钮,您应为UseVisualStyleBackColor = false
设置ButtonAllLayout
。
顺便说一句,在生产代码中,在GUI线程上打开数据库连接并不是一个好主意。