4

夕方、userInterface 部分クラスに役立つ静的クラスに次のコードがあります。コンボボックス/テキストボックスが表示されているかどうかを確認するセクションに到達するたびに:

if (cb.Visible == true)

&

if (tb.Visible == true)

コントロールがフォーム上に表示されている場合でも、常に false です。

何か案は?

ありがとう

public static bool VerifyTableLayoutControlsContainData(TableLayoutPanel tlp)
    {
        foreach (Control input in tlp.Controls)
        {
            ComboBox cb = input as ComboBox;
            if(cb != null)
            {
                if (cb.Visible == true)
                {
                    if (string.IsNullOrEmpty(cb.SelectedItem.ToString()))
                    {
                        return false;
                    }
                }
            }

            TextBox tb = input as TextBox;
            if (tb != null)
            {
                if (tb.Visible == true)
                {
                    if (string.IsNullOrEmpty(tb.Text))
                    {
                        return false;
                    }
                }
            }
        }
        return true;
    }

スクリーンショット

編集1:

UserInterface コード

    private void uiBtnDataVerification_Click(object sender, EventArgs e)
    {
        if (VerifyingData != true)
        {
            AllInputsContainDataCsvFileVerificationStage = true;
            //Check all inputs have something in them
            InputsContainDataCsvFileVerificationStage();

            if (AllInputsContainDataCsvFileVerificationStage == false)
            {
                UiHelper.UpdateLog("One or more inputs has not been specified.", uiTxtOperationLog);
                return;
            }

            ...
        }
        else
        {
            //Cancel permanent cancellation token.
        }
    }

    public void InputsContainDataCsvFileVerificationStage()
    {

        ....

        if (UiHelper.VerifyTableLayoutControlsContainData(uiTableLayoutPanelColumnDataTypes)) { }
        else
        {
            AllInputsContainDataCsvFileVerificationStage = false;
        }

        ....
    }

元のコードは UiHelper クラスにあります

Edit2:トムの提案に従って、次の変更を加えました

public userInterface()
    {
        InitializeComponent();

        uiTableLayoutPanelColumnDataTypes.VisibleChanged += new EventHandler(notifyMe);
        uiCBColumn1DataType.VisibleChanged += new EventHandler(notifyMe1);

        SortedColumnNames = new List<TextBox>();
        SortedDataTypes = new List<ComboBox>();
        AllInputsContainDataCsvFileVerificationStage = true;
    }

    public void notifyMe1(object sender, EventArgs e)
    {
        bool temp = uiCBColumn1DataType.Visible;
        MessageBox.Show("its been changed");
    }

    public void notifyMe(object sender, EventArgs e)
    {
        bool temp = uiTableLayoutPanelColumnDataTypes.Visible;
        MessageBox.Show("its been changed");
    }

ボタンをクリックする前に、cb1 可視性プロパティがどのように設定されているかを確認しましたが、それは True でした。元の方法でチェックしようとすると、まだ false になります。

困った!!

編集3:

2番目のタブをクリックすると、コンボボックスの可視プロパティ= falseのようです。

これがなぜなのか誰か知っていますか??

4

1 に答える 1

6

私のコメントから:

検証コードを実行するときは、TableLayoutPanel コントロールが画面に表示されている必要があります。非アクティブな TabPage の背後にある場合、画面には表示されず、デザイナーでプロパティが true に設定されているかどうかに関係なく、コントロールは Visible プロパティを false として報告します。

于 2012-07-24T23:15:18.987 に答える