Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中调用panel.invalidate外部窗体类#_C#_Winforms - Fatal编程技术网

C# 在C中调用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(); 有什

我需要在我的表单(WINform)类之外调用“panel.invalidate”,我还需要更改一些其他控件,我在这里读到了类似的问题,并尝试了他们所说的,但它不起作用,我一点也不相信

我读到的答案是关于公开这样一个公共方法:

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();
    }
}