C# 在C中调用panel.invalidate外部窗体类#
我需要在我的表单(WINform)类之外调用“panel.invalidate”,我还需要更改一些其他控件,我在这里读到了类似的问题,并尝试了他们所说的,但它不起作用,我一点也不相信 我读到的答案是关于公开这样一个公共方法:C# 在C中调用panel.invalidate外部窗体类#,c#,winforms,C#,Winforms,我需要在我的表单(WINform)类之外调用“panel.invalidate”,我还需要更改一些其他控件,我在这里读到了类似的问题,并尝试了他们所说的,但它不起作用,我一点也不相信 我读到的答案是关于公开这样一个公共方法: public void EnableButton(bool enable) { this.myButton.Enabled = enable; } 我还在另一个文件中创建了一个静态实例 static Form1 myForm = new Form1(); 有什
public void EnableButton(bool enable)
{
this.myButton.Enabled = enable;
}
我还在另一个文件中创建了一个静态实例
static Form1 myForm = new Form1();
有什么有用的建议吗???你是从同一个线程更新的吗?否则,您可能需要使用Invoke。 下面是一篇关于如何做到这一点的精彩短文:
控件。Invalidate()
是一个公共方法,但控件本身很可能不是公共的。您必须通过表单中面向公众的方法或将有问题的控件标记为public来公开对Control.Invalidate()
的调用
public class MyForm : Form {
private TextBox tbxName = new TextBox();
public InvalidateTextBox() {
tbxName.Invalidate();
}
}
或
问题在于“myForm”引用。它是对Form1实例的引用,该实例不可见,并且与用户正在查看的实例不匹配。这不可能是匹配的,你创建了一个新的
任何需要更新表单的类都必须有一个接受Form1引用的构造函数。您可以在Form1构造函数或加载事件中创建类对象,并传递“this”。使用Application.OpenForms[0]是获取引用的另一种方法,您不应该使用它。我所说的答案不起作用。不起作用如何?抛出异常?编译时错误?你的计算机制造了一个黑洞吞没了你的猫?我的意思是“没有工作”,控件中没有任何更改。面板上没有绘制任何内容。我的函数已经是“Public”,Public void panelinvalization(){panel1.Invalidate();},这个函数也是Public void listBoxAdd(对象g){listBox1.Items.Add(g);}
public class MyForm : Form {
public TextBox tbxName = new TextBox();
}
public class SomeOtherClass {
public void InvalidateTextBox(MyForm form) {
form.tbxName.Invalidate();
}
}