मैं नियंत्रण की दृश्यता को नियंत्रित करने के लिए एक क्रिया का उपयोग करने की कोशिश कर रहा हूं। मेरे कोड इस तरह दिखता है:नियंत्रण की दृश्यता निर्धारित करने के लिए मैं एक क्रिया का उपयोग कैसे कर सकता हूं?
पास्कल फ़ाइल
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ActnList, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ActionList1: TActionList;
Action1: TAction;
CheckBox1: TCheckBox;
procedure Action1Update(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Action1Update(Sender: TObject);
begin
(Sender as TAction).Visible := CheckBox1.Checked;
end;
end.
फार्म फ़ाइल
object Form1: TForm1
object Button1: TButton
Left = 8
Top = 31
Action = Action1
end
object CheckBox1: TCheckBox
Left = 8
Top = 8
Caption = 'CheckBox1'
Checked = True
State = cbChecked
end
object ActionList1: TActionList
Left = 128
Top = 8
object Action1: TAction
Caption = 'Action1'
OnUpdate = Action1Update
end
end
end
प्रपत्र पहले चलाता बटन दिखाई देता है और चेक बॉक्स को चेक किया गया है। फिर मैं चेक बॉक्स को अन-चेक करता हूं और बटन गायब हो जाता है। जब मैं चेक बॉक्स को दोबारा जांचता हूं तो बटन फिर से दिखने में विफल रहता है।
मुझे लगता है कि इस का कारण यह TCustomForm.UpdateActions
में निम्नलिखित स्थानीय समारोह के अंदर पाया जा सकता है:
procedure TraverseClients(Container: TWinControl);
var
I: Integer;
Control: TControl;
begin
if Container.Showing and not (csDesigning in Container.ComponentState) then
for I := 0 to Container.ControlCount - 1 do
begin
Control := Container.Controls[I];
if (csActionClient in Control.ControlStyle) and Control.Visible then
Control.InitiateAction;
if (Control is TWinControl) and (TWinControl(Control).ControlCount > 0) then
TraverseClients(TWinControl(Control));
end;
end;
Control.Visible
की जांच कभी खुद को फिर से अद्यतन करने के लिए एक मौका हो रही मेरी कार्रवाई को रोकने के लिए प्रकट होता है।
क्या मैंने इस मुद्दे का सही ढंग से निदान किया है? क्या यह डिज़ाइन द्वारा है या क्या मुझे क्यूसी रिपोर्ट जमा करनी चाहिए? क्या किसी को कामकाज के बारे में पता है?
उहम, आप ['OnUpdate'] (http://docwiki.embarcadero.com/Libraries/en/Vcl.ActnList.TAction.OnUpdate) का उपयोग क्यों कर रहे हैं? – TLama
@TLama: क्योंकि यही वह है। अक्सर, मुझे लगता है कि, आप 'दृश्यमान' की बजाय 'सक्षम 'सेट करते हैं। –
यह एक बग है, या कम से कम एक Misbegotten- फ़ीचर। आप किसी भी कार्रवाई पर सक्षम और दृश्यमान सेट करने में सक्षम होना चाहिए, और किसी भी लिंक किए गए नियंत्रण को सक्षम किए गए मान और दृश्यमान के उस मूल्य को रीफ्रेश किया जाना चाहिए। यदि यहां एक्शन अपडेट की आवश्यकता है, तो यह उस प्रकार की डिकूप्लिंग को तोड़ देता है जिसे आप करने का प्रयास कर रहे हैं। चेकबॉक्स को अब कार्रवाई के साथ जोड़ा जाना है। मैं केवल दृश्य में किसी भी बदलाव के लिए ऑनअपडेट का उपयोग करना बंद कर दूंगा, और चेकबॉक्स ऑनक्लिक में केवल एक पंक्ति के रूप में दिखाई देने वाली या दृश्य दिखाई नहीं दे सकता। –