Как сделать, чтобы при вводе значения его нельзя было изменить?

Есть поле состоящее из Label, при вводе значения в TextBox оно переносится в определенный Label и заменяет его(вместо цифры крестик или нолик). Как сделать так, чтобы при вводе значения (допустим в первую клетку крестика) его нельзя было изменить на другое.

Каждая клетка это Label

Unit Unit2;
interface
uses System, System.Drawing, System.Windows.Forms;

type
  Form2 = class(Form)
    procedure Form2_Load(sender: Object; e: EventArgs);
    procedure button1_Click(sender: Object; e: EventArgs);
    procedure button2_Click(sender: Object; e: EventArgs);
    procedure textBox1_TextChanged(sender: Object; e: EventArgs);
  {$region FormDesigner}
  internal
    {$resource Unit2.Form2.resources}
    pictureBox1: PictureBox;
    label1: &Label;
    textBox2: TextBox;
    button2: Button;
    label2: &Label;
    label3: &Label;
    label4: &Label;
    label5: &Label;
    label6: &Label;
    label7: &Label;
    label8: &Label;
    label9: &Label;
    label10: &Label;
    label11: &Label;
    textBox1: TextBox;
    label12: &Label;
    button1: Button;
    {$include Unit2.Form2.inc}
  {$endregion FormDesigner}
  public
    constructor;
    begin
      InitializeComponent;
    end;
  end;

implementation

procedure Form2.Form2_Load(sender: Object; e: EventArgs);
begin
  
end;

procedure Form2.button1_Click(sender: Object; e: EventArgs);
begin
 if textBox1.Text='1' then Label1.Text:='x'; 
 if textBox1.Text='2' then Label2.Text:='x';
 if textBox1.Text='3' then Label3.Text:='x';
 if textBox1.Text='4' then Label4.Text:='x';
 if textBox1.Text='5' then Label5.Text:='x';
 if textBox1.Text='6' then Label6.Text:='x';
 if textBox1.Text='7' then Label7.Text:='x';
 if textBox1.Text='8' then Label8.Text:='x';
 if textBox1.Text='9' then Label9.Text:='x';
 
  if button2.Enabled = true then button1.Enabled:=false; //Переход между вводами
  if button1.Enabled = true then button1.Enabled:=false; //Переход между вводами
  if button1.Enabled = false then button2.Enabled:=true; //Переход между вводами
end;

procedure Form2.button2_Click(sender: Object; e: EventArgs);
begin  
  if textBox2.Text ='1' then Label1.Text:='O';
  if textBox2.Text ='2' then Label2.Text:='O';
  if textBox2.Text ='3' then Label3.Text:='O';
  if textBox2.Text ='4' then Label4.Text:='O';
  if textBox2.Text ='5' then Label5.Text:='O';
  if textBox2.Text ='6' then Label6.Text:='O';
  if textBox2.Text ='7' then Label7.Text:='O';
  if textBox2.Text ='8' then Label8.Text:='O';
  if textBox2.Text ='9' then Label9.Text:='O';

  if button2.Enabled = true then button2.Enabled :=false; //Переход между вводами
  if button2.Enabled = false then button1.Enabled :=true; //Переход между вводами
end;

procedure Form2.textBox1_TextChanged(sender: Object; e: EventArgs);
begin
  
end;

end.

Ответы (1 шт):

Автор решения: Alexey

Для того чтобы защитить от повторной перезаписи значения в Label можно использовать Label1.Tag. Tag по умолчанию равен нулю, значит делаем проверку, если он Tag равен нулю, значит в это поле еще ничего не записывали. Далее делаем запись нового значения в Label.Text и присваиваем Label1.Tag что то отличное от нуля, например единицу. Теперь если снова попробовать записать в Label1 крестик или ноль то уже ничего не выйдет, старое значение не будет изменено. Реализация:

procedure Form2.button1_Click(sender: Object; e: EventArgs);
begin   
   if (textBox1.Text = '1') and (Label1.Tag = 0) then
   begin
      Label1.Text:='x';
      Label1.Tag = 1;
   end;
→ Ссылка