C# 在按钮触发的方法中填写表单上的组合框

C# 在按钮触发的方法中填写表单上的组合框,c#,winforms,sqlite,combobox,C#,Winforms,Sqlite,Combobox,首先,如果我单击一个按钮,cbBefüllen方法将执行 private void btnEntfernen_Click(object sender, EventArgs e) { FeiertageEntfernen entfernen = new FeiertageEntfernen(); entfernen.cbBefüllen(); entfernen.Show(); entfernen.Focus(); } 下面的方法只是我的表单和类之间的接口。(请不

首先,如果我单击一个按钮,cbBefüllen方法将执行

private void btnEntfernen_Click(object sender, EventArgs e)
{
    FeiertageEntfernen entfernen = new FeiertageEntfernen();
    entfernen.cbBefüllen();
    entfernen.Show();
    entfernen.Focus();
}
下面的方法只是我的表单和类之间的接口。(请不要问,在我的代码中我有一些很好的理由;))

cbfeiertagebeffüllen(尝试)方法填充我的组合框,该组合框以“feiertagentferen”的形式存在


但在整个过程之后,我的组合框仍然是空的。上一张图片中的读取器从数据库中选择了正确的值,但不知何故它不会将其写入组合框。

看起来您正在向组合框添加选项,但实际上并没有设置所选项目


为此,您需要设置cbFeiertag.SelectedIndex或cbFeiertag.SelectedValue。

看起来您正在向组合框添加选项,但实际上并没有设置所选项目


为此,您需要设置cbFeiertag.SelectedIndex或cbFeiertag.SelectedValue。

您的问题在这一行:

FeiertageEntfernen feiertagentfernen = new FeiertageEntfernen();
在您的
cbfeiertagebfüllen()中

您创建了一个新表单,但希望填写第一段代码表单中的组合框。要解决这个问题,可以将表单的一个实例传递给filling方法

更新后的2段代码将是(第一段代码可以单独保留):

在cbBefullen中:

database.cbFeiertagebefüllen(this);
//'this' means we're passing along the form as parameter
public void cbFeiertagebefüllen(FeiertageEntfernen feiertagentfernen)
{
    string Query = @"select bezeichnung from feiertage";
    using (var command = new SQLiteCommand(Query, sqlite_conn))
    {
        if (sqlite_conn.State != ConnectionState.Open)
        {
            sqlite_conn.Open();
        }
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                string übergabe = reader.GetString(0);
                feiertagentfernen.cbFeiertag.Items.Add(übergabe);
            }
        }
    }

}
在cbfeiertagebeüllen中:

database.cbFeiertagebefüllen(this);
//'this' means we're passing along the form as parameter
public void cbFeiertagebefüllen(FeiertageEntfernen feiertagentfernen)
{
    string Query = @"select bezeichnung from feiertage";
    using (var command = new SQLiteCommand(Query, sqlite_conn))
    {
        if (sqlite_conn.State != ConnectionState.Open)
        {
            sqlite_conn.Open();
        }
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                string übergabe = reader.GetString(0);
                feiertagentfernen.cbFeiertag.Items.Add(übergabe);
            }
        }
    }

}

您的问题在这一行:

FeiertageEntfernen feiertagentfernen = new FeiertageEntfernen();
在您的
cbfeiertagebfüllen()中

您创建了一个新表单,但希望填写第一段代码表单中的组合框。要解决这个问题,可以将表单的一个实例传递给filling方法

更新后的2段代码将是(第一段代码可以单独保留):

在cbBefullen中:

database.cbFeiertagebefüllen(this);
//'this' means we're passing along the form as parameter
public void cbFeiertagebefüllen(FeiertageEntfernen feiertagentfernen)
{
    string Query = @"select bezeichnung from feiertage";
    using (var command = new SQLiteCommand(Query, sqlite_conn))
    {
        if (sqlite_conn.State != ConnectionState.Open)
        {
            sqlite_conn.Open();
        }
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                string übergabe = reader.GetString(0);
                feiertagentfernen.cbFeiertag.Items.Add(übergabe);
            }
        }
    }

}
在cbfeiertagebeüllen中:

database.cbFeiertagebefüllen(this);
//'this' means we're passing along the form as parameter
public void cbFeiertagebefüllen(FeiertageEntfernen feiertagentfernen)
{
    string Query = @"select bezeichnung from feiertage";
    using (var command = new SQLiteCommand(Query, sqlite_conn))
    {
        if (sqlite_conn.State != ConnectionState.Open)
        {
            sqlite_conn.Open();
        }
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                string übergabe = reader.GetString(0);
                feiertagentfernen.cbFeiertag.Items.Add(übergabe);
            }
        }
    }

}

要使其起作用,您需要填写的组合框
应该全局声明,即在您的函数范围之外。其余的可能没问题。另外,如果您将需要在组合框中显示的值获取到主窗体,而不是调用
组合框
实例2级别,则效果更好


我知道这有点混乱,简单地说,你可以做的是,将
DataBase
中的值(假期描述)填入列表中。使函数在调用时返回此列表。最后,如果声明了
组合框
,您可以将该列表添加为
组合框

的源。要使其工作,您需要填充的
组合框
应该全局声明,即在您的函数范围之外。其余的可能没问题。另外,如果您将需要在组合框中显示的值获取到主窗体,而不是调用
组合框
实例2级别,则效果更好


我知道这有点让人困惑,简单地说,你能做的就是把
数据库中的值(假期描述)填入一个列表中。使函数在调用时返回此列表。最后,在声明了
组合框的地方,您可以将该列表添加为
组合框的源

cbFeiertagebefüllen()
中填充
cbfeiertage
组合框的
feiertagefernen
表单实例不是随后显示的表单实例。您需要将
entfernen
实例传递给
cbFeiertagebefüllen()


cbFeiertagebefüllen()
中填充
cbfeiertage
组合框的
feiertageernen
表单实例不是在此之后显示的表单实例。您需要将
entfernen
实例传递给
cbFeiertagebefüllen()


cbBefüllen可以称之为组合框的填充,但我看不出你称之为。。或者至少从代码中,如果它没有显示如何链接的话up@BugFinder
feiertagentfernen.cbFeiertag.Items.Add(übergabe)不回答问题:P btentfernen\u单击不调用其他两个函数中的任何一个,或者至少不从代码中调用listed@BugFinder我不明白。btnEntfernen_单击调用cbBefüllen方法。这个方法将调用dbFeiertagbefüllen方法:/
feiertagentfernen
,因为
entfernen
实例一旦离开实例化它们的方法就会被销毁。您需要填充在这些方法范围之外声明的组合框。cbBefüllen可能会调用组合框填充,但我看不出您会调用它。。或者至少从代码中,如果它没有显示如何链接的话up@BugFinder
feiertagentfernen.cbFeiertag.Items.Add(übergabe)不回答问题:P btentfernen\u单击不调用其他两个函数中的任何一个,或者至少不从代码中调用listed@BugFinder我不明白。btnEntfernen_单击调用cbBefüllen方法。这个方法将调用dbFeiertagbefüllen方法:/
feiertagentfernen
,因为
entfernen
实例一旦离开实例化它们的方法就会被销毁。您需要填写一个在这些方法范围之外声明的组合框。@EpicKip实际上我收回了这一点。OP说“cbfeiertagebefeüllen方法确实填充了我的组合框”和“我的组合框选择仍然是空的”。如果这是关于它没有填充,那么应该在问题中更清楚。OP是德语,有一些小的语法错误,让你觉得,但他没有在哪里尝试选择它,甚至,
它不会将它写入组合框
@EpicKip我收回,实际上。OP说“cbfeiertagebefeüllen方法确实填充了我的组合框”和“我的组合框选择仍然是空的”。如果这是关于it而不是填充,那么应该在问题中澄清。OP是Ge吗