enkle middel for å gjøre noen komponenter data-aware. Alternative data-aware boksene (og radioknapper) som kan ordnes mer fleksibelt. 
 Selv om nyere versjoner av Delphi kan tilby bedre måter å vise data-aware samlinger av avmerkingsboksene og radioknapper, jeg fortsatt bruker D4. Jeg har ofte ønsket en data-aware komponent som (a) inkluderer ikke det skråskårne eske D4 radioknappen gruppen, (b) kan gjøres for å ligne noen papirskjemaer nærmere, (c) tillater mer fleksibel ordning av elementene i gruppen, og (d) tillater uvanlige mønstre av knappene for å være "på" og "off" samtidig. 
 Kort sagt, mer fleksibilitet. 
 Jeg tror denne oppskriften gjør dette, og det illustrerer også enkle midler for gjøre noen kontroller som ikke er data-aware erverve denne muligheten ved å samarbeide med de som er. 
 De øvre og nedre rader av boksene er representert i Delphi koden nedenfor ved klassene TCheckboxCollection og TPersonalityCBCollection hhv. Hver av disse klassene er en beholder for avmerkingsboksen beskrivelsene og deres metoder, Click, GetValue og SetValue, etablere atferden til kontroller kollektivt, og sørge for å knytte sin kollektive verdi med tilhørende data-aware kontroll og dermed med datalageret. 
 øvre sett boksene oppfører seg omtrent som en runde knappene. I kontrast, kan mer enn én av settet av lavere boksene kontrolleres på en gang, og " RESET " avkrysnings kan brukes til å fjerne sjekker fra alle samtidig 
 Dine kommentarer Velkommen  enhet 
 Unit1;.!  grensesnitt 
  bruker 
 Windows, Meldinger, SysUtils, Klasser, Grafikk, Kontroller, skjemaer, dialoger, Db, StdCtrls, Mask, DBCtrls, DBTables, ExtCtrls;  skriv 
 TCheckboxDescriptor =  klasse 
 //skjule standardvirkemåten av i boksen i respons //til et klikk, og forenkle manipulering av den innkapslede objekt  privat 
 preClickedState: TCheckBoxState;  funksjon 
 GetState: TCheckBoxState;  prosedyre 
 SetState (State: TCheckBoxState);  avkrysnings offentlig Bilde: TCheckbox;  eiendom 
 State: TCheckBoxState lese GetState skrive SetState;  konstruktør 
 Lag (theCheckbox: TCheckbox);  end 
; TCheckboxCollection =  klasse 
 //knytte en data-aware redigeringsboksen og dens verdi med en samling //markeringsfelt beskrivelsene; standard oppførsel ligner radio knapper checkboxDescriptors: tListe; handlingClick: Boolean;  privat 
  funksjon 
 FindSender (Sender: TObject): TCheckboxDescriptor;  funksjon 
 GetValue:  string 
;  prosedyre 
 SetValue (NewValue:  string 
);  offentlig 
 associatedDBEdit: TDBEdit;  konstruktør 
 Lag (DBEdit: TDBEdit; theCheckboxes:  rekke 
  av 
 TCheckbox);  prosedyre 
 Klikk (Sender: TObject);  eiendom 
 Verdi:  string 
 lese GetValue skrive SetValue;  end 
; TPersonalityCBCollection =  klasse plakater (TCheckboxCollection) //avledet klasse som tillater mer enn én avkrysnings å bli sjekket på //gangen, og bruker ett kryss ved å tilbakestille de andre  privat 
  funksjon 
 GetValue:  string 
;  prosedyre 
 SetValue (NewValue:  string 
);  offentlig 
  eiendom 
 Verdi:  string 
 lese GetValue skrive SetValue;  prosedyre 
 Klikk (Sender: TObject);  end 
; TForm1 =  klasse plakater (TForm) Table1: TTable; DBEdit1: TDBEdit; DataSource1: TDataSource; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; CheckBox5: TCheckBox; CheckBox6: TCheckBox; CheckBox7: TCheckBox; CheckBox8: TCheckBox; CheckBoxNA: TCheckBox; CheckBox9: TCheckBox; CheckBox10: TCheckBox; CheckBox11: TCheckBox; CheckBox12: TCheckBox; CheckBox13: TCheckBox; CheckBox14: TCheckBox; CheckBox15: TCheckBox; CheckBox16: TCheckBox; DBNavigator1: TDBNavigator; Label1: TLabel; Label2: TLabel; Label3: TLabel; Shape1: TShape; Label4: TLabel; DBEdit2: TDBEdit;  prosedyre 
 FormCreate (Sender: TObject);  prosedyre 
 CheckBoxNAClick (Sender: TObject);  prosedyre 
 DBEdit1Change (Sender: TObject);  prosedyre 
 CheckBox9Click (Sender: TObject);  prosedyre 
 DBEdit2Change (Sender: TObject);  privat 
 SeverityCBs: TCheckboxCollection; PersonalityCBs: TPersonalityCBCollection;  offentlig 
  end 
;  Var 
 Form1: TForm1;  implementering product: {$ R * .DFM}  konstruktør 
 TCheckboxDescriptor.Create (theCheckbox: TCheckbox);  begynne 
  arvet 
 Lag; avkrysnings: = theCheckbox; //Beholde utformingen tilstanden i avkrysnings preClickedState: = theCheckbox.State;  end 
;  funksjon 
 TCheckboxDescriptor.GetState: TCheckBoxState;  begynne 
 resultat: = preClickedState; < b> end 
;  prosedyre 
 TCheckboxDescriptor.SetState (State: TCheckBoxState);  begynne 
 checkbox.State: = stat; preClickedState: = State  end 
;  konstruktør 
 TCheckboxCollection.Create (DBEdit: TDBEdit; theCheckboxes:  rekke 
  av 
 TCheckbox);  Var 
 jeg: integer;  begynne 
  arvet 
 Lag; associatedDBEdit: = DBEdit; checkboxDescriptors: = TList.Create;  for 
 i: = 0  for bedriften høy (theCheckboxes)  trenger 
 checkboxDescriptors.Add (TCheckboxDescriptor.Create (theCheckboxes [i])); handlingClick: = false;  end 
;  funksjon 
 TCheckboxCollection.FindSender (Sender: TObject): TCheckboxDescriptor;  Var 
 c: integer; checkboxDescriptor: TCheckboxDescriptor;  begynne 
 checkboxDescriptor: =  nil 
;  for 
 c: = 0  for bedriften checkboxDescriptors.Count - en  do 
  begynne 
 checkboxDescriptor: = checkboxDescriptors.Items [c];  hvis 
 checkboxDescriptor.checkbox = Sender  deretter 
 bryte  end 
; Resultatet: = checkboxDescriptor  end 
;  prosedyre 
 TCheckboxCollection.Click (Sender: TObject);  Var 
 clickedCBDescriptor, oneCBDescriptor: TCheckboxDescriptor; c: integer;  begynne 
  hvis 
 handlingClick  deretter 
 exit; handlingClick: = true; clickedCBDescriptor: = FindSender (Sender);  hvis 
 clickedCBDescriptor.State = cbChecked  deretter 
 clickedCBDescriptor.State: = cbUnchecked  annet 
  begynne 
 clickedCBDescriptor.State: = cbChecked;  for 
 c: = 0  for bedriften checkboxDescriptors.Count - en  do 
  begynne 
 oneCBDescriptor: = checkboxDescriptors.Items [c];  hvis 
 oneCBDescriptor < > clickedCBDescriptor  deretter 
 oneCBDescriptor.State: = cbUnchecked;  end 
;  end 
; associatedDBEdit.DataSource.Edit; associatedDBEdit.Text: = verdi; handlingClick: = false;  end 
;  prosedyre 
 TPersonalityCBCollection.Click (Sender: TObject);  Var 
 clickedCB: TCheckbox; clickedCBDescriptor, oneCBDescriptor: TCheckboxDescriptor; c: integer;  begynne 
  hvis 
 handlingClick  deretter 
 exit; handlingClick: = true; clickedCB: = Sender  som 
 TCheckbox; clickedCBDescriptor: = FindSender (Sender);  hvis 
 clickedCB.Name = 'CheckBox16'  deretter 
  for 
 c: = 0  til 
 checkboxDescriptors. Telle - en  do 
  begynne 
 oneCBDescriptor: = checkboxDescriptors.Items [c]; oneCBDescriptor.State: = cbUnchecked;  end 
  annet 
  case 
 clickedCBDescriptor.State  av 
 cbChecked: clickedCBDescriptor.State: = cbUnchecked;  annet 
 clickedCBDescriptor.State: = cbChecked;  end 
; associatedDBEdit.DataSource.Edit; associatedDBEdit.Text: = verdi; handlingClick: = false;  end 
;  funksjon 
 TPersonalityCBCollection.GetValue:  string 
;  Var 
 c, modulo, resultAsInt: integer; oneCBDescriptor: TCheckboxDescriptor;  begynne 
 resultAsInt: = 0; modulo: = 1;  for 
 c: = 0  til 
 checkboxDescriptors. Telle - 2  do 
  begynne 
  hvis 
 c > 0  deretter 
 modulo: = modulo * 2; oneCBDescriptor: = checkboxDescriptors.Items [c];  hvis 
 oneCBDescriptor.checkbox.State = cbChecked  deretter 
 resultAsInt: = resultAsInt + modulo;  end 
; Resultatet: = IntToStr (resultAsInt)  end 
;  funksjon 
 TCheckboxCollection.GetValue:  string 
;  Var 
 c: integer; oneCBDescriptor: TCheckboxDescriptor;  begynne 
  for 
 c: = 0  til 
 checkboxDescriptors. Telle - en  do 
  begynne 
 oneCBDescriptor: = checkboxDescriptors.Items [c];  hvis 
 oneCBDescriptor.checkbox.State = cbChecked  deretter 
  begynne 
  hvis 
 oneCBDescriptor.checkbox.Caption = 'N /A'  deretter 
 resultat: = "0"  annet 
 resultat: = oneCBDescriptor.checkbox.Caption; bryte  end 
  end 
  end 
;  prosedyre 
 TPersonalityCBCollection.SetValue (NewValue:  string 
);  Var 
 c, modulo, mønster: integer; oneCBDescriptor: TCheckboxDescriptor;  begynne 
  hvis 
 NewValue = ''  deretter 
 exit;  hvis 
 handlingClick  deretter 
 exit; handlingClick: = true; modulo: = 1; mønster: = StrToInt (NewValue);  for 
 c: = 0  til 
 checkboxDescriptors. Telle - en  do 
  begynne 
  hvis 
 c = 0  deretter 
 modulo: = 1  annet 
 modulo: = modulo * 2; oneCBDescriptor: = checkboxDescriptors.Items [c];  hvis plakater (mønster  og Selge modulo) < > 0  deretter 
 oneCBDescriptor.State: = cbChecked  annet 
 oneCBDescriptor.State: = cbUnchecked;  end 
; handlingClick: = false;  end 
;  prosedyre 
 TCheckboxCollection.SetValue (NewValue:  string 
);  Var 
 c: integer; oneCBDescriptor: TCheckboxDescriptor;  begynne 
  hvis 
 NewValue = ''  deretter 
 exit;  hvis 
 handlingClick  deretter 
 exit; handlingClick: = true;  for 
 c: = 0  til 
 checkboxDescriptors. Telle - en  do 
  begynne 
 oneCBDescriptor: = checkboxDescriptors.Items [c]; oneCBDescriptor.State: = cbUnchecked;  end 
; c: = StrToInt (NewValue); oneCBDescriptor: = checkboxDescriptors.Items [c]; oneCBDescriptor.State: = cbChecked; handlingClick: = false;  end 
;  prosedyre 
 TForm1.FormCreate (Sender: TObject);  begynne 
 SeverityCBs: = TCheckboxCollection. Lag (DBEdit1, [CheckBoxNA, CheckBox1, CheckBox2, CheckBox3, CheckBox4, CheckBox5, CheckBox6, CheckBox7, CheckBox8]); PersonalityCBs: = TPersonalityCBCollection.Create (DBEdit2, [CheckBox9, CheckBox10, CheckBox11, CheckBox12, CheckBox13, CheckBox14, CheckBox15, CheckBox16]); Table1.Open  end 
;  prosedyre 
 TForm1.CheckBoxNAClick (Sender: TObject);  begynne 
 SeverityCBs.Click (Sender);  end 
; < b> prosedyre 
 TForm1.DBEdit1Change (Sender: TObject);  begynne 
 SeverityCBs.SetValue (DBEdit1.Text)  end 
;  prosedyre 
 TForm1.CheckBox9Click (Sender : TObject);  begynne 
 PersonalityCBs.Click (Sender);  end 
;  prosedyre 
 TForm1.DBEdit2Change (Sender: TObject);  begynne 
 PersonalityCBs .SetValue (DBEdit2.Text)  end 
;.  end 
 
D4: Making TCheckbox data Aware med TDBEdit
Next Page:ASP.NET danner godkjenning med roles 
			 
        
