<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.visual-prolog.com/index.php?action=history&amp;feed=atom&amp;title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89</id>
	<title>DialogForm Validation（对话框及表单的确认） - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.visual-prolog.com/index.php?action=history&amp;feed=atom&amp;title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89"/>
	<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;action=history"/>
	<updated>2026-05-28T08:57:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;diff=4148&amp;oldid=prev</id>
		<title>Yiding: /* 参考 */</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;diff=4148&amp;oldid=prev"/>
		<updated>2015-07-05T01:11:11Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;参考&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 03:11, 5 July 2015&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l167&quot;&gt;Line 167:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 167:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==参考==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==参考==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tutorials]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/ins&gt;Category:Tutorials]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:GUI]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;:&lt;/ins&gt;Category:GUI]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tutorials部分中文译文]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Tutorials部分中文译文]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Yiding</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;diff=4147&amp;oldid=prev</id>
		<title>Yiding at 01:05, 5 July 2015</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;diff=4147&amp;oldid=prev"/>
		<updated>2015-07-05T01:05:55Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;amp;diff=4147&amp;amp;oldid=4146&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Yiding</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;diff=4146&amp;oldid=prev</id>
		<title>Yiding: Blanked the page</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;diff=4146&amp;oldid=prev"/>
		<updated>2015-07-05T00:54:55Z</updated>

		<summary type="html">&lt;p&gt;Blanked the page&lt;/p&gt;
&lt;a href=&quot;https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;amp;diff=4146&amp;amp;oldid=4145&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Yiding</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;diff=4145&amp;oldid=prev</id>
		<title>Yiding: Created page with &quot;（以下内容，译自:Category:Tutorials中的DialogForm Validation。更多内容可以参看:Category:Tutorials部分中文译文及:Category:Chinese。）   用...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=DialogForm_Validation%EF%BC%88%E5%AF%B9%E8%AF%9D%E6%A1%86%E5%8F%8A%E8%A1%A8%E5%8D%95%E7%9A%84%E7%A1%AE%E8%AE%A4%EF%BC%89&amp;diff=4145&amp;oldid=prev"/>
		<updated>2015-07-05T00:40:23Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;（以下内容，译自&lt;a href=&quot;/index.php?title=Category:Tutorials&quot; title=&quot;Category:Tutorials&quot;&gt;Category:Tutorials&lt;/a&gt;中的DialogForm Validation。更多内容可以参看&lt;a href=&quot;/index.php?title=Category:Tutorials%E9%83%A8%E5%88%86%E4%B8%AD%E6%96%87%E8%AF%91%E6%96%87&quot; title=&quot;Category:Tutorials部分中文译文&quot;&gt;Category:Tutorials部分中文译文&lt;/a&gt;及&lt;a href=&quot;/index.php?title=Category:Chinese&quot; title=&quot;Category:Chinese&quot;&gt;Category:Chinese&lt;/a&gt;。）   用...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;（以下内容，译自[[:Category:Tutorials]]中的DialogForm Validation。更多内容可以参看[[:Category:Tutorials部分中文译文]]及[[:Category:Chinese]]。）&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
用户按了对话框中的OK按钮后，就意味着将要出现某件事情。不过只有对话框或表单中的数据有效时，事情才会出现。对话框和表单必须经过 &amp;#039;&amp;#039;&amp;#039;有效性确认&amp;#039;&amp;#039;&amp;#039;。本专题将描述由PFC GUI支持的有效性确认机制，还要介绍如何使用校验控件&amp;#039;&amp;#039;integerControl&amp;#039;&amp;#039; 和 &amp;#039;&amp;#039;realControl&amp;#039;&amp;#039; 及如何确认对话框表单中其它的控件。&lt;br /&gt;
&lt;br /&gt;
本文将演示如何确认在对话框或表单中的控件。首先，要介绍有效性确认的概念。我们会看到integerControl和realControl是如何使用有效性确认概念的。接着，我们要考虑在容器控件中的有效性确认问题。最后，来看几个常用控件的有效性确认，这些控件有：editControl、listBox、新建用户控件。&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;下载&amp;#039;&amp;#039;&amp;#039; 本文使用的示例工程源文件：&lt;br /&gt;
&lt;br /&gt;
* Visual Prolog 7.4 和 7.3 IDE下安装示例：&lt;br /&gt;
*:&amp;#039;&amp;#039;&amp;#039;Help -&amp;gt; Install Examples...&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [http://download.pdc.dk/vip/72/tutorial_examples/validation.zip Visual Prolog 7.2 version].&lt;br /&gt;
* [http://download.pdc.dk/vip/71/examples/tutorial_examples/validation.zip Visual Prolog 7.1 version].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==有效性确认的概念==&lt;br /&gt;
&lt;br /&gt;
有效性确认的概念基础思想是：“控件值应该是有效的”。有效性的确认发生在对话框或表单中按动OK按钮时，但确认工作也可以由程序安排。&lt;br /&gt;
&lt;br /&gt;
控件负责声明自己的内容是有效的，因此，可以对控件设置有效性确认响应器。&lt;br /&gt;
&lt;br /&gt;
对话框或表单作有效性确认时，是逐个控件依次进行的，但如果结果导致&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;contentsInvalid(Source, FocusControl, ErrorMessage)&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
则确认工作就终止了。&lt;br /&gt;
&lt;br /&gt;
==integerControl和realControl中的有效性确认==&lt;br /&gt;
&lt;br /&gt;
我们来创建一个表单，并用类integerControl和realControl加入两个 &amp;#039;&amp;#039;&amp;#039;custom controls&amp;#039;&amp;#039;&amp;#039; （用户控件）。可以在提供的示例工程&amp;lt;vp&amp;gt;integerControlAndRealControl&amp;lt;/vp&amp;gt;看到相应的表单结果。&lt;br /&gt;
&lt;br /&gt;
示例生成的代码如下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;integerControl_ctl := integercontrol::new(This),&lt;br /&gt;
integerControl_ctl:setPosition(92, 4),&lt;br /&gt;
integerControl_ctl:setSize(60,12),&lt;br /&gt;
realControl_ctl := realcontrol::new(This),&lt;br /&gt;
realControl_ctl:setPosition(92, 20),&lt;br /&gt;
realControl_ctl:setSize(60,12),&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
还需要加上对 &amp;lt;vp&amp;gt;integerControlAndRealControl&amp;lt;/vp&amp;gt; 表单的调用：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;predicates&lt;br /&gt;
    onFileIntegercontrolRealcontrol : window::menuItemListener.&lt;br /&gt;
clauses&lt;br /&gt;
    onFileIntegercontrolRealcontrol(Source, _MenuTag) :-&lt;br /&gt;
        Form = integerControlAndRealControl::new(Source),&lt;br /&gt;
        Form:show().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
运行这个工程，如果输入了非整数值，将会看到一个说明错误的消息框。&lt;br /&gt;
&lt;br /&gt;
我们也可以加入 &amp;lt;vp&amp;gt;onOK&amp;lt;/vp&amp;gt; 响应器来获取确认后的值：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;predicates&lt;br /&gt;
    onOk : button::clickResponder.&lt;br /&gt;
clauses&lt;br /&gt;
    onOk(_) = button::defaultAction() :-&lt;br /&gt;
        Integer = integerControl_ctl:getInteger(),&lt;br /&gt;
        Real = realControl_ctl:getReal(),&lt;br /&gt;
        stdIO::write(&amp;quot;Integer value = &amp;quot;,Integer, &amp;quot;\n&amp;quot;),&lt;br /&gt;
        stdIO::write(&amp;quot;Real value = &amp;quot;,Real, &amp;quot;\n&amp;quot;).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
要注意，如果有效性确认不成功，是&amp;#039;&amp;#039;&amp;#039;不会&amp;#039;&amp;#039;&amp;#039;调用 &amp;lt;vp&amp;gt;onOK&amp;lt;/vp&amp;gt; 响应器的，而且该响应器的调用是发生在所有确认谓词之后。&lt;br /&gt;
&lt;br /&gt;
我们来看一下源文件 &amp;#039;&amp;#039;&amp;#039;\pfc\gui\controls\integerControl.pro&amp;#039;&amp;#039;&amp;#039; ，看看有效性确认是如何实现的。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;clauses&lt;br /&gt;
    new() :-&lt;br /&gt;
        editControl::new(),&lt;br /&gt;
        addValidateResponder(onIntValidate).&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    onIntValidate : validateResponder.&lt;br /&gt;
clauses&lt;br /&gt;
    onIntValidate(_) = contentsInvalid(This,This, ErrorMessage) :-&lt;br /&gt;
        string(ErrorMessage) = checkContent(getText()),&lt;br /&gt;
        !.&lt;br /&gt;
    onIntValidate(_) = contentsOk.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
也就是说，如果局部谓词checkContent认为文本内容是 &amp;lt;vp&amp;gt;integer&amp;lt;/vp&amp;gt; 则确认成功。&lt;br /&gt;
&lt;br /&gt;
上面我们说过，确认工作也可以强制程序安排进行。可以这样加一个按钮 TryValidation 及相应的代码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;predicates&lt;br /&gt;
    onTryValidation : button::clickResponder.&lt;br /&gt;
clauses&lt;br /&gt;
    onTryValidation(_Source) = button::defaultAction() :-&lt;br /&gt;
        tryValidateWithErrorDialog(),&lt;br /&gt;
        !,&lt;br /&gt;
        stdIO::write(&amp;quot;All controls are valid\n&amp;quot;).&lt;br /&gt;
    onTryValidation(_Source) = button::defaultAction().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==容器控件中的有效性确认==&lt;br /&gt;
&lt;br /&gt;
考查容器控件中的有效性确认，我们先来创建一个这样的控件：在工程中创建一个新的控件&amp;lt;vp&amp;gt;fromTo&amp;lt;/vp&amp;gt;，再在其中加入两个integerControl控件。&lt;br /&gt;
&lt;br /&gt;
考虑到只有当&amp;lt;vp&amp;gt;From&amp;lt;/vp&amp;gt;的值小于&amp;lt;vp&amp;gt;To&amp;lt;/vp&amp;gt;的值控件&amp;lt;vp&amp;gt;fromTo&amp;lt;/vp&amp;gt;才是有效的，因此可以这样设置&amp;lt;vp&amp;gt;fromTo&amp;lt;/vp&amp;gt;控件的有效性确认响应器：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;predicates&lt;br /&gt;
    validateFromTo : control::validateResponder.&lt;br /&gt;
clauses&lt;br /&gt;
    validateFromTo (Source) = control::contentsInvalid(Source,from_ctl,&lt;br /&gt;
      &amp;quot;From value must be less than To value&amp;quot;) :-&lt;br /&gt;
        from_ctl:getInteger() &amp;gt;= to_ctl:getInteger(),&lt;br /&gt;
        !.&lt;br /&gt;
    validateFromTo (_) = control::contentsOk.&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
请注意，如果有效性确认不成功，控件 &amp;lt;vp&amp;gt;from_ctl&amp;lt;/vp&amp;gt; 会得到焦点。&lt;br /&gt;
&lt;br /&gt;
==常用控件的有效性确认==&lt;br /&gt;
&lt;br /&gt;
我们在工程中创建一个新控件 &amp;lt;vp&amp;gt;myControl&amp;lt;/vp&amp;gt; ，再创建一个表单并在其中添加三个控件：&lt;br /&gt;
&lt;br /&gt;
*edit 控件；&lt;br /&gt;
&lt;br /&gt;
*listbox 控件；&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;vp&amp;gt;myControl&amp;lt;/vp&amp;gt; 类的用户控件。&lt;br /&gt;
&lt;br /&gt;
可以在提供的示例&amp;#039;&amp;#039;usualControls&amp;#039;&amp;#039;中看到表单的结果。&lt;br /&gt;
&lt;br /&gt;
初始化代码中包含了响应器的设置及对三个控件的初始化内容：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;clauses&lt;br /&gt;
    new(Parent) :-&lt;br /&gt;
        formWindow::new(Parent),&lt;br /&gt;
        generatedInitialize(),&lt;br /&gt;
        edit_ctl:addValidateResponder(validateEditCtl),&lt;br /&gt;
        listbox_ctl:addList([&amp;quot;First&amp;quot;,&amp;quot;Second&amp;quot;,&amp;quot;Third&amp;quot;]),&lt;br /&gt;
        listbox_ctl:addValidateResponder(validateListBox).&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
有效性确认响应器是这样的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;predicates&lt;br /&gt;
    validateEditCtl : control::validateResponder.&lt;br /&gt;
clauses&lt;br /&gt;
    validateEditCtl(_) = control::contentsOk :-&lt;br /&gt;
        &amp;quot;OK&amp;quot; = edit_ctl:getText(),&lt;br /&gt;
        !.&lt;br /&gt;
    validateEditCtl(Source) = control::contentsInvalid(&lt;br /&gt;
          Source, Source,&lt;br /&gt;
          &amp;quot;Edit control expects to have the text &amp;#039;OK&amp;#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    validateListBox : control::validateResponder.&lt;br /&gt;
clauses&lt;br /&gt;
    validateListBox(Source) = control::contentsInvalid(&lt;br /&gt;
          Source,Source,&lt;br /&gt;
          &amp;quot;Selection of the first row is not allowed&amp;quot;) :-&lt;br /&gt;
        0 = listbox_ctl:tryGetSelectedIndex(),&lt;br /&gt;
        !.&lt;br /&gt;
    validateListBox(_) = control::contentsOk().&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    validateMyControl : control::validateResponder.&lt;br /&gt;
clauses&lt;br /&gt;
    validateMyControl(Source) = control::contentsInvalid(&lt;br /&gt;
          Source,Source,&lt;br /&gt;
          string::concat(&amp;quot;A marker in the &amp;quot;,Missed,&lt;br /&gt;
            &amp;quot; part is mandatory&amp;quot;)) :-&lt;br /&gt;
        Missed = toString(isMandatoryMarkNotActive(&lt;br /&gt;
          mandatoryMark, activatedMark)),&lt;br /&gt;
        !.&lt;br /&gt;
    validateMyControl(_) = control::contentsOk().&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
可以看到，对控件的有效性确认可以有各种不同的方法。&lt;br /&gt;
&lt;br /&gt;
==参考==&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
[[Category:GUI]]&lt;br /&gt;
&lt;br /&gt;
[[:Category:Tutorials部分中文译文]]&lt;/div&gt;</summary>
		<author><name>Yiding</name></author>
	</entry>
</feed>