2012-03-20 6 views
0

私は7つのTabSheetを持つPageControlを持っており、すべてのタブは隠されていて、pcMain.ActivePage:= tsAuto(tsMarineなど)を使用してページを変更しますが、変更と変更のイベントは発生しません。PageControl Tabを非表示にすると問題が変わる:提案?

私は以下のことを試みましたが、タブが表示されている場合にのみ動作します。 http://delphi.about.com/od/adptips2005/a/bltip0205_5.htm

また、pcMain.SelectNextPage(True)を使用して、カウンタとSelectNextPageを増減する処理を記述しましたが、タブが表示されている場合にも機能します。

誰もがこの問題を回避する方法を提案していますか?私はデータベースが編集状態にある場合にページを残さないためにChanging-EventのAllowChangeを使用する必要があります。

+1

「ActivePage」 –

+0

Davidに割り当てるたびに自分で更新コードを呼び出すことができますが、これは私のケースでは7回のユニークな呼び出しを行い、変更イベントの発生を回避します。 – user983145

+1

'ActivePage'を手動で割り当てるときはいつでも、現在割り当てられている' OnChanging/OnChange'イベントハンドラを直接呼び出してください。それを自動化するには、割り当てとイベント呼び出しを、必要なときに呼び出すことができるヘルパー関数で囲みます。 –

答えて

0

japan.infoのコードは正常に動作するはずです。明示的にはCanChangeChangeが呼び出され、割り当てられている場合はイベントハンドラが呼び出されます。要求されたタブが表示されているかどうかはチェックしません。また、SelectNextPageも有効です。 2番目のパラメータにはFalseを渡して、タブの可視性を無視するように指示するだけです。 (2番目のパラメータの値を指定しない場合、デフォルト値はTrueです。)

どちらの手法も機能しない場合は、問題が他の場所にあるため深く掘り下げる必要があります。

他にも、データベースの変更が保留されている場合は、新しいアクティブページを割り当てないでください。結局のところ、あなたは次のページに行くことに決めました。それが起こるべきではないことを事前に知っているなら、まずそれを試してはいけません。

+1

Embaが修正しないタブが隠されている場合(例えば、[QC49135](http://qc.embarcadero.com/wc/qcmain.aspx?d=49135))、Delphiの 'TPageControl'にバグがあります。さて、私はこれらのバグがここの問題に関連しているかどうかはわかりませんが、確かに可能です。 –

+0

@David、そのレポートに記述されている関数はDelphi 2005には存在しないため、以前のバージョンでは存在しないと思われます。 –

+0

私のD6コードを見ると、むしろ隠されたタブに関連するバグが現代のDelphiよりも悪いと思われます。私はこれらのバグを修正するために 'PageIndexFromTabIndex'が追加されたと思いますが、バグ100%を修正しませんでした。 –

関連する問題