簡體   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