gpt4 book ai didi

c# - 为什么在 C# 中的用户控件中添加 Form 实例时程序会卡住?

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:41 24 4
gpt4 key购买 nike

我是 c# 的新手,正在使用 Windows 窗体。我有一个带有按钮 (Button_Save) 和 textboxForm1 。我有一个带按钮的用户 control1 (button1)。

我想在这个程序中做的是:当我点击 button1 时,它的文本出现在 textbox 中(在 Form1 中) ,然后我输入新文本并单击保存,button1 文本相应更改。

我会解释卡住发生的时间:

有两部分:

第一部分:当我在 Form1 中创建用户 control1 的实例时,我参与了 UserControl1Event 并运行程序,它工作正常并且 button1 文本当我点击它时出现在 textbox 中。第二部分当我在用户 control1 中创建 Form1 的实例并参与 Form1Event 并运行程序时,程序卡住了很长时间然后给出错误指向用户 control1 中的 Form1 实例(如屏幕截图所示)。

有人知道为什么会这样吗?我做错了什么?

enter image description here

表格 1:

public partial class Form1 : Form
{
public event EventHandler Form1Event;

UserControl1 uc1 = new UserControl1();

public Form1()
{
InitializeComponent();

Controls.Add(uc1);
uc1.Visible = true;
uc1.UserControl1Event += new EventHandler(Handleuc1);
}


string Return_TextBox_Txt;
public string TextBox_Txt
{
get { return Return_TextBox_Txt; }

}



public void Handleuc1(object sender, EventArgs e) ////////////Handle uc1 event
{
textBox1.Text = uc1.ButtonText;

}



private void button_save__Click(object sender, EventArgs e)//change button text
{
Return_TextBox_Txt = textBox1.Text;

Form1Event(this, e);
}

}

用户控制1:

public partial class UserControl1 : UserControl
{


string BtnTxt;



Form1 frm1 = new Form1();

public event EventHandler UserControl1Event;



public string ButtonText
{
get { return BtnTxt; }

}


private void UserControl1_Load(object sender, EventArgs e)
{

frm1.Form1Event += new EventHandler(HandleForm1Event);


}

public void HandleForm1Event(object sender, EventArgs e)
{

button1.Text = frm1.TextBox_Txt;
}

private void Button1_Click(object sender, EventArgs e)
{

BtnTxt = button1.Text;

UserControl1Event(this, e);
}
}

最佳答案

问题是您的两个类都相互依赖。

Form1 在创建时会创建 UserControl1 的实例,后者又会创建 Form1 的实例,依此类推。所有这些链式创建最终会使您的代码抛出 StackOverflowException

关于c# - 为什么在 C# 中的用户控件中添加 Form 实例时程序会卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35038447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com