2017-07-08 74 views
1

我想要一個文本文件來顯示memo1中的內容,一旦我選擇了2個複選框。 我該怎麼做?選擇多個複選框執行條件

我試了下面的代碼,但我似乎無法得到它的權利。

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; 

任何建議/改進將不勝感激。

運行拉撒路IDE v1.6.4

的Windows 10的x64

回答

3

據我瞭解你想要的以下行爲:

  • 有兩個複選框
  • 還有就是一個備忘錄字段
  • 根據兩個複選框的狀態,備註字段中的文本應改變

如果這種認識是正確的:

我通常不使用帕斯卡爾但你的問題似乎是獨立於所使用的編程語言。我會這樣做:

只要相應複選框的狀態發生變化,就會調用兩個過程TForm1.CheckBox1ChangeTForm1.CheckBox2Change

我會寫第三個procedure並從這兩個過程中調用這個第三個procedure。除了在另外兩個程序中調用第三個procedure,我什麼都不會做。

在第三個procedure我會評估做什麼 - 取決於兩個複選框的狀態。

1

如果您雙擊該事件,則設計器會自動生成每個事件的單獨複選框更改步驟。然而,這不是一個嚴格的決定。

如果你有最初的codefragment在例如checkbox1change,你可以簡單地通過使用checkbox2的平變化的下拉點checkbox2到現有checkbox1change的平變化

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,而另一個不是),並且您想獲取正確的文件名稱,而不管用戶是否實際點擊了其中任何一個。