繁体   English   中英

Windows窗体控件不会被代码隐藏更新

[英]Windows Form Controls Aren't Updated by Code Behind

我的Windows窗体项目中存在某个窗体的问题。 只有一种形式存在问题; 还有其他几个使用相同类型的引用,没有这个问题。

问题是通过后面的代码修改控件实际上并没有在表单上更新它们。 从将数据库中的值添加到组合框的Items集合(通过.Items.Add()方法),设置文本框或复选框以启用或不启用,设置文本框的文本或检查复选框的状态......没有任何作用。 我已经尝试在所有方法中注释掉所有代码,除了为某些控件实际设置启用状态的代码,以确保在我不知情的情况下没有其他任何东西在运行,但问题仍然存在。

正如调试器所示,更改启用状态的代码肯定会被命中,并且启用状态设置正确,无论是真还是假,具体取决于条件。 应该禁用的控件仍然可以编辑,看起来仍然可以编辑。 代码最初使用intellisense编写,以自动填充控件名称,因此从代码后面的代码链接到表单上的正确控件不应该有任何问题。 我也尝试将表单放大并放入一个空白的面板中,上面有一个新的文本框和复选框,并通过相同的方法设置面板启用或禁用,当它运行时控件也没有由后面的代码改变了。

关于我可能遗失的任何建议? 这是Windows窗体的基本功能,我不知道可能是什么问题,我通过谷歌搜索或搜索此网站找不到任何类似的问题。

谢谢!

编辑:这是一个应该工作的片段的代码示例,但事实并非如此。 类似的代码用于其他几种形式而没有问题。

选中名为chkDisable的复选框时,将运行以下事件:

    private void chkDisable_CheckedChanged(object sender, EventArgs e)
    {
        SetControlsEnabledStatus(!((CheckBox)sender).Checked);
    }

    private void SetControlsEnabledStatus(bool enabledStatus)
    {
        textBox1.Enabled = enabledStatus;
        textBox2.Enabled = enabledStatus;
    }

我100%确定此事件连接正确,它正确触发,并且文本框的启用状态设置正确。 没有其他方法具有可以覆盖此功能的未注释代码。 但是,只要在单击复选框后再次加载表单,就会始终启用文本框。

编辑2:如果有人遇到他们自己的问题,这是导致我的问题的原因:

我不得不从头开始在一个新表格上最终得到这个跟踪。 事实证明,在构造函数和FormLoad事件中都调用了InitializeComponent()。 基本上,我创建了一个具有相同控件的新表单,只运行了Disable事件,当我复制Load代码时,Disable停止工作。

尝试清理解决方案并重新启动所有解决方案。 (:

如果这不起作用,你可以发布一些代码吗?

编辑:

好的,没有代码可以在这里查看,...我将提供一些基本建议。

开始在整个表单中放置MessageBox.Show(“我执行!”)。 将它放在构造函数/初始化事件中。 把它放在click事件等中。你可能在某处处理异常,而更新表单的代码永远不会有机会执行。

显然有一些错误,直到我们可以排除代码中存在问题,我们才会假设它存在。 如果您发布代码,我们可以将其复制并粘贴到我们自己的项目中,看看它的行为方式。 如果它有效,那么我们可以确认代码是好的,并且问题必须存在于其他地方。

希望有所帮助。 (:

编辑:

好吧,使用您提供的代码,我创建了一个沙箱项目:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WinFormsSandbox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void chkDisable_CheckedChanged(object sender, EventArgs e)
        {
            SetControlsEnabledStatus(!((CheckBox)sender).Checked);
        }

        private void SetControlsEnabledStatus(bool enabledStatus)
        {
            textBox1.Enabled = enabledStatus;
            textBox2.Enabled = enabledStatus;
        }
    }
}

在此输入图像描述

在此输入图像描述

这个对我有用。 您发布的代码中不得存在该错误。

编辑:

你知道,我讨厌放弃找到问题的根本原因,但是如果这是一个时间敏感的问题,你可以更快地从头开始创建一个新表单并复制功能。 (:

我有类似的问题,他们已经通过在我的表单中添加一个OnShown处理程序来帮助它,它会翻转一个保护其他事件处理代码的布尔值。 这个想法是初始化过程中的某些事情导致控件的事件以您不希望发生的方式触发。 它并不理想,但至少可能值得尝试作为调试措施。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM