C# 访问表单变量

C# 访问表单变量,c#,forms,object,properties,C#,Forms,Object,Properties,在C中使用基本表单应用程序时,我在访问其中的变量时遇到困难 所以在我的表格课上 public partial class pingerform : Form { .. .. private System.Windows.Forms.TextBox textBox2; public string textBox2Text { get { return textBox2.Text; } set { textBox2.Text = value; }

在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 非静态字段需要对象引用, 方法或属性 'PingPerform.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

如何在不创建表单的特定实例的情况下访问表单属性

我有一个后台线程正在运行,我想定期更新表单中的文本文件

干杯


Aaron

在不创建实例的情况下,无法访问实例的属性,这是胡说八道或VB。您已经创建了实例,然后将其传递给Application.Run。无论如何,在应用程序结束后,您不能对表单执行任何操作。请运行,因为它仅在应用程序退出时返回。如果你想用表单做任何事情,你需要在其他地方做。当然,您不能使表单类成为静态的,因为您需要创建实例

如果需要在另一个线程中对表单执行某些操作,则需要在创建表单时将表单实例传递给该线程。请注意,尽管直接从非GUI线程处理GUI元素是个坏主意,但您应该使用Control.BeginInvoke。

请尝试以下方法:

pingerform myForm = new pingerform();    
Application.Run(myForm);
myForm.textBox2Text = "this is text";

您别无选择,只能创建新实例并将其作为参数传递给线程,或者将其存储为主程序类的成员

第二个选项的示例:

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);
    }
}
别忘了把文本框改成公共的


注意:对于一个后台线程访问文本框的简单情况,这是一个简单的工作解决方案。如果您有更多的线程访问它,这将中断。对于需要更多工作的最佳实践方法,请。

Run方法是阻塞的。但事实上,我需要创建表单的实例。另外,由于更新表单的进程正在seprerate线程中运行,它还会被阻止吗?不要说跑步是前进的方向。但我只是想知道:@DevilWAH要运行你的应用程序,你必须使用run-it的basic。创建一个表单的显式实例会被认为是最佳实践吗。这就是为什么在visual Studio中创建模板时使用的方法不这样做的原因。@DevilWAH除了在VB或其他语言中,这是唯一可能的做法madness@wRAR为什么会破裂?请解释一下好吗?这是一个表单和一个后台线程,如果你是这个意思的话,就看不到任何冲突的风险。我花了一点时间来了解你所说的代码是什么意思:但是你现在知道你在做什么了。我尝试这样做的方式是通过在表单中创建单独的线程。它在控制台界面上运行良好,从我刚才测试的内容来看,我认为我已经越过了障碍。Cheers@ShadowWizard因为您可以从非GUI线程访问GUI元素。您也不应该建议将控制字段公开,并从不同的线程访问未受保护的全局变量,即使在这种情况下看起来是安全的。此外,我不知道在GUI循环之前访问表单时,表单究竟会如何中断,但它肯定会。