gpt4 book ai didi

c# - 在类和表单之间传递值

转载 作者:行者123 更新时间:2023-11-30 22:20:03 24 4
gpt4 key购买 nike

我是 C# 的新手 - 但一切进展顺利 - 到目前为止。

我从完成大部分工作的表单和类开始(非静态和程序部分)。我在表单 1 中实例化该类的一个对象并进行登录。

然后我切换到下一个表单,form2。实际上,类(class)就是这样做的。我在那里有一个方法,其中包含以下行:

this.f2 = new Form2();

然后:

f2.Show();

f2 是 Form2 类型的类成员 - 到目前为止一切正常。

这个 Form2 只包含一个大文本框,我想在其中显示网络事件。事件处理程序工作得很好——但对表单的引用似乎不起作用。如果我这样做

f2.tetBox1.Text = "Some text";

它只是不会改变文本框中的文本。

我在这里做错了什么?

这里是我正在做的更详细的描述:

Form1 将一些登录信息传递给 myProg,作为 MyClass 的一个实例。如果登录成功,Form1 调用 myProg.makeForm();

这是 MyClass 中的方法的样子:

public void makeForm() {
this.f2 = new Form2();
f2.Show();
this.sendString("start f2");
}

这是MyClass.sendString():

private void sendString(string text) {
SystemSounds.Beep.Play();
this.f2.setTextBox(text);
}

如您所见,这调用了 Form2setTextBox() - 我按照此处的建议实现了它。奇怪的是,到目前为止一切正常。 Form2 显示一个包含“start f2”的 textBox1 - 正如预期的那样。但是当事件到来时,textBox1 中的文本不会改变。哔哔声播放正常 - 所以方法 sendString() 被调用正常。

我观察到的一件事:如果在调用 this.f2.setTextBox(text); 之后放置哔声,如果从事件调用该方法,则不会播放处理程序。

f2,顺便说一句,是 MyClass 的私有(private)成员:

private Form2 f2;

最佳答案

由设计者创建的任何控件(例如在设计时从工具箱中删除的控件)都会自动设置为私有(private)。因此,您无法从其他表单访问它。

您不想开始打乱设计器,相反 - 在您的 Form2 上创建一个属性,它允许您修改 Form1 中的文本框文本.

一个简短的例子是这样的:

表格 2:

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}


// When modifying the Text property it will change the text in textbox1
public string Text
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
}

然后,在 Form1 中:

Form2 frm2 = new Form2();
frm2.Text = "123"; // Uses the public Text property declared in Form2
frm2.Show();

关于c# - 在类和表单之间传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191693/

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