C# 访问表单变量
在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; }
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循环之前访问表单时,表单究竟会如何中断,但它肯定会。