一旦我选择了2个复选框,我想要一个文本文件在memo1中显示内容。 我该怎么做?
我尝试了下面的代码,但我似乎无法正确使用。
if CheckBox1.Checked and CheckBox2.Checked then
begin
memo1.lines.LoadFromFile('files\RS.txt');
end;
我也希望能够单独选择复选框。 (如果将它们组合在一起,可以防止单独检查它们)
Checkbox1:
procedure TForm1.CheckBox1Change(Sender: TObject);
begin
memo1.lines.LoadFromFile('files\R.txt');
end;
Checkbox2:
procedure TForm1.CheckBox2Change(Sender: TObject);
begin
memo1.lines.LoadFromFile('files\S.txt');
end;
任何建议/改进将不胜感激。
运行Lazarus IDE v1.6.4
Windows 10 x64
答案 0 :(得分:4)
我假设你的目标是生成一个依赖于的文件名 两个复选框的布尔状态的特定组合 - 请参阅下面的示例代码这样做的关键是它有助于分离 您希望文件名的定义来自您想要做什么 用它。
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.LoadFromFile(GetFileName);
end;
function TForm1.GetFileName: String;
begin
// Return empty string if neither checkbox is checked
Result := '';
if Checkbox1.Checked and Checkbox2.Checked then
Result := 'files\RS.txt'
else // if we reach here only one of the checkboxes, or neither, is checked
if Checkbox1.Checked then
Result := 'files\R.txt'
else
if Checkbox2.Checked then
Result := 'files\S.txt'
end;
我在开始时为函数的Result
分配了一个空字符串,以确保始终定义Result
。
重要您会注意到上面的内容不使用复选框的更改事件。原因是,如果永远不会触发Change事件,您可能无法获得所需的结果(或期望) - 例如,如果一个CheckBox在IDE中设置为Checked但另一个未设置为Checked,并且您希望获得正确的文件名,无论用户是否实际点击了其中任何一个。
答案 1 :(得分:3)
据我了解,您需要以下行为:
如果这种理解是正确的:
我通常不使用Pascal,但您的问题似乎与使用的编程语言无关。我会这样做:
只要相应的复选框状态发生变化,就会调用TForm1.CheckBox1Change
和TForm1.CheckBox2Change
这两个程序。
我会写第三个procedure
并从两个程序中调用第三个procedure
。除了在另外两个程序中调用第三个procedure
之外,我什么都不做。
在第三个procedure
中,我会评估要做什么 - 取决于两个复选框的状态。
答案 2 :(得分:1)
如果双击事件,设计者将自动生成每个事件的单独checkboxchange序列。然而,这不是一个严格的决定。
如果你有初始代码片段,例如checkbox1change,你可以通过使用checkbox2的onchange下拉列表将checkbox2的onchange指向现有的checkbox1change