表单和代码不同步

本文关键字:同步 代码 表单 | 更新日期: 2023-09-27 17:58:19

我有一个文本框,里面有一些文字("hello"(。如果我将文本更改为其他任何内容并从文本框中获取文本(通过代码(,尽管我更改了它,但我会得到"hello"。

另一种情况下,当我更改复选框的检查状态时,复选框不会在视觉上勾选(或取消选中(。

有人知道发生了什么以及如何同步它们吗?

我打开了一个新项目,这是我表单上的唯一功能:

public void Switch()
    {
        Checkbox1.Checked = !Checkbox1.Checked;
    }

我从程序中调用它.cs :

static MainForm MyForm;
MyForm = new MainForm();
MyForm.Switch();

表单和代码不同步

我假设您只是在Main中实例化MainForm,然后调用Switch.

这意味着您不会在 UI 线程上发送请求。

因此,您可以Invoke要在 UI 线程上运行的代码:

public void Switch()
{
    // true if off of the UI thread, and thus must be Invoked
    if (this.InvokeRequired)
    {
        // off UI thread; put it onto it
        this.Invoke(Switch);
    }
    else
    {
        // on UI thread
        Checkbox1.Checked = ! Checkbox1.Checked;
    }
}

应仅从 UI 线程与 UI 交互。你不应该用 Invoke 乱扔你的代码,除非你希望从 UI 线程中调用它,或者你为其他人提供了一种这样做的方法(一些公共 API(。