首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Load事件未触发

C# Load事件未触发
EN

Stack Overflow用户
提问于 2011-11-07 04:12:54
回答 3查看 10.1K关注 0票数 4

我正在学习C#,但在触发加载系统事件时遇到了问题。它一直工作得很好,直到我将form1和form2链接在一起,以便在它们之间传递变量。IE从form2上的所选项目中将标签设置在表单1上。谢谢你的帮助!

下面是我的Form1代码:

代码语言:javascript
复制
 namespace WindowsFormsApplication5
 {
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }


    private void button1_Click(object sender, EventArgs e)
    {
        selectdb selectdb = new selectdb(this); // this is the button that shows the form in question.  It worked fine until I added the (this).
        selectdb.Show();
    }

    public string LabelText
    {
        get { return label1.Text; }
        set { label1.Text = value; }
    }

}

}

下面是我的Form2代码:

代码语言:javascript
复制
 namespace WindowsFormsApplication5
{
public partial class selectdb : Form
{

    public selectdb()
    {
        InitializeComponent();
        //this.Name = "selectdb";
        //this.Text = "selectdb";
        this.Load += new System.EventHandler(selectdb_Load);

    }
    private Form1 mainForm = null;

    public selectdb(Form callingForm)
    {
        mainForm = callingForm as Form1;
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        this.mainForm.LabelText = listBox1.SelectedItem.ToString();
    }

    private void selectdb_Load(Object sender, EventArgs e)
    {
        // Microsoft Access provider factory 
        DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");

        DataTable userTables = null;
        using (DbConnection connection = factory.CreateConnection())
        {
            connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\"C:\\Database.accdb\";Persist Security Info=False;";
            // We only want user tables, not system tables 
            string[] restrictions = new string[4];
            restrictions[3] = "Table";

            connection.Open();

            // Get list of user tables 
            userTables = connection.GetSchema("Tables", restrictions);
        }

        List<string> tableNames = new List<string>();
        for (int i = 0; i < userTables.Rows.Count; i++)
            listBox1.Items.Add(userTables.Rows[i][2].ToString());

    }

}
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-07 04:32:34

你做事情的方式非常奇怪,但问题的答案是,在使用接受表单作为参数的构造函数时,你没有设置事件。您可以通过以下几种方法之一来解决此问题。你可以只在你的无参数构造函数中复制代码,或者你可以像下面这样做。注意构造函数之后的: this(),这将在无参数构造函数执行带参数的构造函数之前调用它。

还要注意,我去掉了额外的InitializeComponent,因为它将在无参数构造函数中执行。

代码语言:javascript
复制
public selectdb() 
{ 
    InitializeComponent(); 
    this.Load += new System.EventHandler(selectdb_Load); 
} 

private Form1 mainForm = null; 

public selectdb(Form callingForm) : this()
{ 
    mainForm = callingForm as Form1; 
} 
票数 6
EN

Stack Overflow用户

发布于 2011-11-07 04:33:51

我认为你需要更改你的新构造函数来调用默认构造函数,这样无论你是如何到达的,所有的东西都可以正确地连接起来:

代码语言:javascript
复制
public selectdb(Form callingForm) : this()
{
    mainForm = callingForm as Form1;
}
票数 1
EN

Stack Overflow用户

发布于 2016-04-22 16:58:51

一个可能的原因: form_load事件没有触发

  1. I引用发布路径中的程序集
  2. I删除引用并创建对我的程序集的项目引用-> form_load事件未激发
  3. 我反转项目引用并使用Release path -> form_load事件再次执行程序集引用。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8030050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档