我有一个主要表格,其中有一个事件可以打开另一个表格。
在第一个表单中,我定义了这样的事件:
private void softToolStripMenuItem_Click(object sender, EventArgs e)
{
_frmSetting = new frmSetting();
_frmSetting.ShowDialog();
}
该事件在对话框中打开一个表单。一切都很好。
在 InitializeComponent(); 之前的Form2内部,我想更改表单2上TextBox的内容。
所以我这样做this.textBox1.Text = "New text";
但它没有用,然后我输出到控制台:
this.textBox1.Text = "New text";
System.Console.WriteLine(this.textBox1.Text);
但是当Form1启动时立即生效..我可以看到控制台输出。 通常情况下,只有在我调用Form2时才能查看控制台输出。
有人了解我的需求吗?
修改
public form2()
{
InitializeComponent();
try
{
this.txtServer = new TextBox();
//this._parameter = new Parameter();
//this._get_parameter = new Dictionary<string, string>();
String _server_name;
//this._parameter.get_db_connection_parameters().TryGetValue("server", out _server_name);
this.txtServer.Text = _server_name.ToString();
System.Console.WriteLine(txtServer.Text + "---");
}
catch (Exception er) { System.Console.WriteLine("An error occurs :" + er.Message + " - " + er.StackTrace); }
}
请不要担心注释行,它的工作原理_server_name变量从文本文件中获取它的值,它在这个阶段工作。问题在于这一行:
this.txtServer.Text = _server_name.ToString();
答案 0 :(得分:3)
你这太复杂了。首先,正如其他人所说,在致电InitializeComponent
之前,你不能这样做。此外,在调用InitializeComponent
后,您无需创建新的文本框。调用该方法后,txtServer
文本框将已创建并正确初始化。您需要做的就是设置其Text
属性的值:
public form2()
{
InitializeComponent();
try
{
String _server_name;
// set value of _server_name
txtServer.Text = _server_name;
}
catch (Exception er) { System.Console.WriteLine("An error occurs :" + er.Message + " - " + er.StackTrace); }
}
答案 1 :(得分:0)
您无法在initializeComponent();
之前将任何值设置为文本框。如果你查看initializeComponent函数,你会看到它确实初始化了设计器和文本框中添加的所有控件。
你无法在初始化之前设置TextBox.Text属性,它会失败,就是这样。
答案 2 :(得分:0)
非常感谢所有人, 现在一切正常。实际上,我在Form1()构造函数中初始化Form2并且正在获取此错误对象引用非对象初始化(类似的东西)。 我把它移到这里:
private void softToolStripMenuItem_Click(object sender, EventArgs e)
{
_frmSetting = new frmSetting();
_frmSetting.ShowDialog();
}
现在位于initializeComponent()
之后的Form2()内部
我只是这样做
this.txtServer = _server_name;
并且有效