2013-08-04 73 views
3

我有一個modalDialog與W3EditBox用戶在其中輸入,最終被添加到一個W3ListBox主要形式防止對話形式

我試圖阻止modalDialog從收盤上的繩子如果存在

1.這些條件之一)W3EditBox文字是零

2)如果W3EditBox文本在W3ListBox列表

這裏已經存在是調用對話形式(代碼剛一標籤,編輯框,確定和取消按鈕)

procedure TfrmMain.HandleAddClick(Sender: TObject); 
begin 
    Application.ShowModal('frmGoal', 'W3Panel1', 'edtTitle', InitDialog, OkResponse, nil); 
end; 

這裏是處理OK響應

procedure TfrmMain.OkResponse(AForm: TW3CustomForm); 
begin 
//code here to prevent if title is nil or already exists in listbox 
W3Listbox1.Add(TfrmGoal(AForm).Title); 
end; 

在另一方面的代碼,我不明白W3ListBox的的IndexOf方法是如何工作的。 我用來搜索字符串 - 它看起來像它想控制

感謝

巴蒂爾

回答

3

比方說,我們有一個主要形式MainForm和對話AddDialog視覺項目。主窗體包含一個列表框lbItems,對話框包含一個包裝面板W3Panel1,包含三個子對象 - 編輯框inpItem和兩個按鈕 - btnOKbtnCancel。 AddDialog對話框以名稱AddDialog註冊。

FAddDialog := TAddDialog.Create(Display.View); 
FAddDialog.Name := 'AddDialog'; 
RegisterFormInstance(FAddDialog, False); 

然後通過簡單的ShowModal調用顯示該對話框。

btnAdd.OnClick := lambda 
    Application.ShowModal('AddDialog', 'W3Panel1', 'inpItem', InitDialog, OkResponse); 
end; 

從對話框訪問主窗體的列表框最簡單的方法是提供對話框以引用主窗體的組件。爲此,請將對象添加到對話框

property Items: TW3ListBox; 

然後在InitDialog中指定其值。

procedure TMainForm.InitDialog(dialog: TW3CustomForm); 
begin 
    (dialog as TAddDialog).Items := lbItems; 
end; 

在對話框本身,您可以設置按鈕點擊處理程序。

btnCancel.OnClick := lambda Application.HideModal(mrCancel); end; 
btnOK.OnClick := lambda CloseDialog; end; 

CloseDialog方法將檢查編輯框是否爲空或等於列表框中已經存在的項目。在這種情況下,IndexOf方法無用,所以只需使用for循環來檢查所有列表框項目即可。

procedure TAddDialog.CloseDialog; 
begin 
    if inpItem.Text = '' then 
    Exit; 
    for var i := 0 to Items.Count - 1 do 
    if Items.Text[i] = inpItem.Text then 
     Exit; 
    Application.HideModal(mrOK); 
end; 

BTW,從主要形式訪問該對話框編輯框中的最好的辦法是通過一個屬性對話框對象將其暴露:

property ItemText: string read (inpItem.Text) write (inpItem.Text); 

在主程序中的代碼可以訪問這個性質。

procedure TMainForm.OkResponse(dialog: TW3CustomForm); 
begin 
    lbItems.Add((dialog as TAddDialog).ItemText); 
end; 
+2

謝謝你gabr!我確實通過對話框中的屬性公開它。 - W3Listbox1.Add(TfrmGoal(AForm).Title);這是退出命令,我想我正在尋找:)雖然很好的解釋 - 它會爲你的智能書(http://www.smartprogrammer.org/) – JakeSays