【问题标题】:Updating or refreshing controls with c#使用 c# 更新或刷新控件
【发布时间】:2021-12-10 01:32:58
【问题描述】:

我制作了一个 winforms 项目,让我可以使用 SQLite 搜索并添加到 SQL 数据库中。 一种形式具有包含与疾病相关的症状或种类的 TreeView 和 CheckedBoxList。这些控件以编程方式填充它们自己的公共非静态函数。 另一种形式让我编辑数据库,特别是添加一个节点到 TreeView 或症状列表。编辑数据库后,它会激活更新上述控件的功能。 我希望它会立即更新控件,但事实并非如此。
我尝试过的一些解决方案:
this.Refresh();
this.Invalidate();
this.BeginUpdate();
this.EndUpdate();
我已经单独或一次完成了它们;尝试了“this.”、“Form1”。和“treeView1。”;但没有人设法更新表单或控件。

然后我想'也许从 Form2 更新 Form1 上的控件与在 Form1 上更新自身不同',所以我添加了 Form1.treeView1.Nodes 以确保它专注于正确的控件。 这仍然没有显示新添加的节点或 checkBoxList 项。

表格1:

using System.Data.SQLite;
// ///
public void UpdateCheckedBoxList(SQLiteConnection conn) {
    SQLiteDataReader sqlite_datareader;
    SQLiteCommand sqlite_cmd = conn.CreateCommand();
    sqlite_cmd.CommandText = "SELECT * FROM Species; ";
    sqlite_datareader = sqlite_cmd.ExecuteReader();

    List<string> myreader = new List<string> { };
    while (sqlite_datareader.Read()) {
        myreader.Add(sqlite_datareader.GetString(1));
    }
    string[] Species = myreader.ToArray();
    checkedListBox1.Items.AddRange(Species);
    this.Refresh();
}

表格2:

SQLiteCommand sqlite_conn = new SQLiteConnection("Data Source=" +
            "C:\\Users\\" + Environment.UserName + "\\Documents\\ddx project\\ddx-database.db; Version = 3; New = True; Compress = True;");
sqlite_conn.Open();
new Form1().UpdateCheckedBoxList(sqlite_conn);

【问题讨论】:

  • 您是否尝试刷新checkedListBox 本身而不是表单?
  • 是的,我已经为treeView、Form 和checkedListBox 尝试过,但遗憾的是没有更新。只有当我从同一个表单中激活该功能时,它才会更新表单/控件。
  • 这个new Form1().UpdateComboBox(sqlite_conn); 创建了一个新的Form1,而不是你正在处理的那个。通过参数化的ctor将Form1传递给Form2,或者用Application.OpenForms.OfType&lt;Form1&gt;().First().UpdateComboBox(sqlite_conn);替换该行。
  • "Refreshing" 通常只是重新绘制控件。正确的数据绑定将允许更改顺利进行,而无需您的英雄行为

标签: c# winforms controls refresh


【解决方案1】:

感谢dr. null 的评论,我设法更新了控件。他们提到我使用new Form1();,创建一个新的Form1,而不是尝试更新打开的Form1。这是一个解决方案:

Application.OpenForms.OfType<Form1>().First().UpdateComboBox(sqlite_conn);

Application.OpenForms.OfType<FormName>().First().formSpecificFunction(args);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多