0

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

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

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

关于我可能遗漏的任何建议?这是 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% 确定此事件连接正确,触发正确,并且文本框的启用状态设置正确。没有其他方法具有可以覆盖它的未注释代码。但是,只要单击复选框后再次加载表单,文本框就会始终处于启用状态。

EDIT2:如果有人因为自己的问题遇到这个问题,这就是导致我的问题的原因:

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

4

2 回答 2

1

尝试清理您的解决方案并重新构建一切以开始。(:

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

编辑:

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

开始将 MessageBox.Show("I executed!") 放在整个表单中。把它放在构造函数/初始化事件中。将它放在单击事件等中。您可能正在某处处理异常,并且更新表单的代码永远没有机会执行。

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

希望能有所帮助。(:

编辑:

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

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

在此处输入图像描述

在此处输入图像描述

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

编辑:

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

于 2012-04-19T19:55:24.487 回答
1

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

于 2012-04-19T20:32:41.370 回答