2013-08-04 44 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