0

フォームがあり、そのフォーム内のすべてのコントロールを実行しています。私のコードは問題なく、すべてのコントロールとそのすべてのプロパティを取得しています。

たとえば、各タブページに2つのタブページと2つのテキストボックスを持つTabControlがあります。
問題は、選択されていない tabPage の場合、テキストボックスのプロパティの表示が False ですが、True に設定していることです。
Control.Select と Control.Focus でこの問題を解決しようとしましたが、 Visible はまだ False です:

  Private Sub createXML(ByVal cnt As Control, ByVal elem As XElement)
    Try

        cnt.Select()
        cnt.Focus()
        Select Case cnt.Controls.Count
            Case Is = 0
               'Code here to write XElement to an XDocument
                'Check Controls properties
            Case Is > 0
                For Each childCnt As Control In cnt.Controls
                    childCnt.Select()
                    childCnt.Focus()

                    Dim childElem As New XElement(childCnt.GetType.ToString)
                    Select Case childCnt.Controls.Count
                        Case Is = 0
                            'Code here to write XElement to an XDocument
                            'Check Controls properties
                        Case Is > 0
                            createXML(childCnt, childElem)
                       End Select
                Next
        End Select

何か案は?毎回実行する必要があるコントロールがわからないことに注意してください

4

1 に答える 1

1

この場合の問題は、現在選択されているタブページに存在しない限り、TabControl がすべてを非表示に設定することです。また、タブを変更すると、コントロールが表示され、以前のコントロールが消えます。では、tabcontrol は、手動で false に設定されたコントロールを追跡して、タブが変更されたときに点灯しないようにするにはどうすればよいでしょうか? 可視プロパティは実際にはブール値に基づいていません。これは、私たちプログラマーにとって簡単に解釈できる方法にすぎません。あなたがそれを見るかどうかに関係なく、覚えておくべきルールや台無しにする設定はありません。目に見えるか、それほど単純ではありません。

それで、あなたの問題をどうするか。基本的に、これを見て最初に思ったのは、「プログラムを開いて、閉じたときと同じように見える」機能を作成したいということです。もちろん、パーサーはおそらくすべてを visible=false に設定しているため、これは現時点では適切に機能していません。したがって、ロード時にタブ コントロール ページの変更後に表示されません。

解決策: 1. タブ コントロールのコントロールにタグを追加します。これにより、保存時にタグを探すことができます。そこにある場合は、visible プロパティを true に設定します。(今後メンテナンスする際に分かりやすく) 2. リフレクションを使って実際に見える状態を取得します。SOスレッドを見て、リフレクションについて読んでください:選択されていないタブページにある場合、control.Visibleを使用するとFalseが返されます(将来のメンテナンス時に理解するのはそれほど簡単ではありません)

于 2012-10-29T13:00:42.747 に答える