在C#中使用基本表单应用程序时,我无法访问其中的变量标签。
所以在表格类中我有
public partial class pingerform : Form
{
..
..
private System.Windows.Forms.TextBox textBox2;
public string textBox2Text
{
get { return textBox2.Text; }
set { textBox2.Text = value; }
}
然后在我的主要应用程序中
Application.Run(new pingerform());
...
...
pingerform.textBox2Text.text() = str;
但我被告知没有对象参考。
错误1
非静态字段需要对象引用, 方法或财产 'pingerform.textBox2Text.get'C:\ Users \ aaron.street \ Documents \ Visual Studio 11 \ Projects \ PingDrop \ PingDrop \ Program.cs 54 21 PingDrop
所以我认为我会让pinger表类静态,但它不会让我这样做?
错误1
无法创建静态类的实例 'PingDrop.pingerform'C:\ Users \ aaron.street \ Documents \ Visual Studio 11 \ Projects \ PingDrop \ PingDrop \ Program.cs 21 29 PingDrop
如何在不创建表单的特定实例的情况下访问表单属性
我有一个运行后台线程,我想定期更新表单中提交的文本?
干杯
亚伦
答案 0 :(得分:0)
如果不创建该实例,则无法访问实例的属性,这是无意义的(或VB是相同的)。您已经创建了一个实例,然后将其传递给Application.Run()
。无论如何,在Application.Run()
之后你无法对你的表单做任何事情,因为它只在app退出时返回。如果您想对表单执行任何操作,则需要在其他位置执行此操作。当然,您不能将表单类设置为静态,因为您需要创建实例。
如果您需要对另一个线程中的表单执行某些操作,则需要在创建时将表单实例传递给该线程。请注意,直接搞乱来自非GUI线程的GUI元素是一个坏主意,您应该使用Control.BeginInvoke()
。
答案 1 :(得分:0)
您别无选择,只能创建新实例并将其作为参数传递给线程,或将其存储为主Program类的成员。
第二个选项的示例:
private static pingerform myPingerform = null;
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
myPingerform = new pingerform();
Thread thread = new Thread(new ThreadStart(UpdateTextBox));
thread.Start();
Application.Run(myPingerform);
}
private static void UpdateTextBox()
{
while (true)
{
myPingerform.textBox2.Text = DateTime.Now.Ticks.ToString();
Thread.Sleep(1000);
}
}
不要忘记将文本框更改为public
。
注意:对于访问文本框的一个后台线程的简单情况,这是一个简单的工作解决方案。如果您有更多线程访问它,会破坏。对于需要更多工作的最佳实践方法,请read this。
答案 2 :(得分:-1)
请试试这个:
pingerform myForm = new pingerform();
Application.Run(myForm);
myForm.textBox2Text = "this is text";