Как сделать, чтобы при вводе значения его нельзя было изменить?
Есть поле состоящее из Label, при вводе значения в TextBox оно переносится в определенный 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 шт):
Для того чтобы защитить от повторной перезаписи значения в 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;
