问题标签 [custom-component]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
10796 浏览

java - JSF 生命周期和自定义组件

关于在 JSF 中开发自定义组件,有几件事我很难理解。出于这些问题的目的,您可以假设所有自定义控件都使用值绑定/表达式(不是文字绑定),但我也对它们的解释感兴趣。

  1. 我在哪里设置值绑定的值?这应该发生在解码中吗?还是应该 decode 做其他事情,然后在 encodeBegin 中设置值?
  2. 从值绑定中读取 - 我何时从值绑定中读取数据,而不是从提交的值中读取数据并将其放入值绑定中?
  3. 与所有这些相关的表单上的动作侦听器何时被调用?JSF 生命周期页面都提到了在各个步骤发生的事件,但是当只调用命令按钮的简单侦听器时,我并不完全清楚

我尝试了一些组合,但最终总是很难找到我认为来自对事件生命周期的基本误解的错误。

0 投票
1 回答
1410 浏览

c# - 将 ApplicationSettings 数据绑定到自定义组件

我有一个已实现的自定义组件, INotifyPropertyChanged并且IBindableComponent.

但是,当我尝试对属性进行数据绑定时,设计器会添加以下行:

而不是像使用 TextBox 那样创建绑定:

我原以为设计者会简单地查看是否 IBindableComponent已实现,如果是,则生成绑定编码而不是分配代码。

任何想法为什么这适用于文本框而不是我的自定义组件?

这是我的自定义组件:

0 投票
5 回答
3405 浏览

c# - 更新源代码时 C# 组件不刷新

我有很多项目的解决方案。一个项目包含很少的自定义组件。这些组件之一用于在图像上显示标题。我们可以改变背景的颜色和许多其他的东西。

问题是如果我决定更改组件背景的默认颜色或更改文本的位置,这些更改不会反映在使用该组件的解决方案的所有其他项目中。我已经编译了组件的项目,所有其他项目都通过项目引用了该组件。

目前,我要做的就是将另一个项目中的组件一个接一个地取下来,然后将其添加回来,那么一切都很好。你有快速的方法吗?

更新 我在该组件中添加了一个 CheckBox ,似乎该复选框无处不在!美好的!但是,当一个属性有一些标签可以让组件更改时(例如背景颜色),它不会更改“默认”值,而是将旧值作为更改后的值放入属性中。所以,如果我没有在“属性”面板中手动添加更改颜色,我会看到旧值设置...

更新 2 替代文字 http://img517.imageshack.us/img517/9112/oldonenewoneei0.png

更新 3:

这个问题仍然存在。只是为了让人们知道我仍然很想找到一种方法。

我已经尝试了一些你的建议。

  1. 如果我清理所有解决方案并仅构建具有自定义控件的项目,那么我将构建解决方案。没有任何变化(为了测试它,我将组件的颜色更改为黄色。没有任何变化:失败
  2. 如果我删除引用并将其添加回项目,然后重建解决方案。我可以看到设计师的旧颜色:失败

对于那些想要帮助我的人,我已经用更多信息和图片(上图)更新了这个问题。

如您所见,组件的旧“编译”显示黄色背景,但是当我插入一个新组件(从 Visual Studio 的左侧工具栏)时,我可以让新组件具有假定的白色背景......

0 投票
2 回答
606 浏览

delphi - How to implement find as you type on a TComboBox descendant

What is the correct way to implement the "find as you type" behavior on a TComboBox descendant component whose style is csOwnerDrawFixed?

0 投票
1 回答
2005 浏览

jsf - 带有登录组件的 JSF 标头?

我对 JSF 和许多相关技术还很陌生。

我正在尝试制作一个具有包含徽标、导航链接和登录框的标头的网站,这样除非用户登录,否则该标头可以轻松地包含在所有站点页面中,在这种情况下不同标题将出现。类似于livejournal的东西。

我研究了一些解决方案,例如创建自定义 JSF 组件来处理登录并将其与 JSP 片段和/或 Facelets 组合。但是经过大量的谷歌搜索,我还没有真正找到任何尝试制作自定义登录组件的人,而且关于创建这样的标题的信息很少。那么这真的是解决我的问题的正确方法吗?有更好的解决方案吗?

提前致谢。

0 投票
3 回答
2497 浏览

delphi - Delphi 的自定义组件重绘问题

我编写了一个从 TLabel 派生的新自定义组件。该组件向组件添加了一些自定义绘图,但没有别的。绘制组件后,一切正常。但是当需要重绘时(比如在组件上拖动另一个窗口),“标签部分”可以正常工作,但我的自定义绘图没有正确更新。我基本上是在重写的 Paint 方法中直接绘制到画布上,当需要重绘时,我的代码绘制的画布部分被涂成黑色。似乎没有调用paint方法。我应该怎么做才能得到正确的重绘?

该组件基本上是:

更新,绘画程序:

解决了:

问题是(冗余)使用 FloodFill。如果 Canvas 不完全可见,floodfill 会导致伪影。我删除了洪水填充,现在它可以根据需要工作。

0 投票
3 回答
4647 浏览

delphi - 如何使用在设计时接受其他控件的子面板创建自定义控件?

我写了一个自定义控件,它有几个子面板。我希望这些子面板能够接受在设计时放置在它们上面的任何附加控件。

不幸的是,在设计时删除的任何控件最终都会出现在我的自定义控件上,而不是面板上。如果我尝试删除标签,这尤其显示:标签的蓝点已显示,但标题未显示,如果我取消选择标签,则根本不再可见。

简化代码(只有一个子面板):

我在这里做错了什么?

(以防万一:我使用的是 Delphi 2007。)

[编辑]

我现在以不同的方式解决了它。该组件不再包含面板,而是指外部面板。这使得它实际上更加灵活,但不利的一面是它不再那么直观易用。

我仍然想知道如何完成我最初描述的内容。是不是有一个开源组件可以做到这一点,所以我可以研究源代码?

0 投票
3 回答
1553 浏览

delphi - Delphi 视觉组件 - 远离 TFrame 基础?

我有一个从 TFrame 构建的可视组件(但随后注册到调色板等);它工作得很好,我喜欢能够使用 IDE 以视觉方式构建它。

我现在想创建一个相关组件的“家族”,为此,我想创建这个组件的超类,然后从那里继承这个组件和其他组件。

有很多方法可以做到这一点,我敢肯定,但我发现自己想知道:是否有工具可以将 *.DFM 文件(即 Forms 或 TFrames)转换为原始 Object Pascal构造函数代码?考虑从哪里开始使用视觉形式或 TFrame 很不错,但随后在某些时候打破了该继承,并用实质上替代 DFM 文件流的构造函数替换了构造函数。

一如既往,所有的想法/意见表示赞赏。

0 投票
2 回答
3481 浏览

delphi - 数组属性、TList、TStringList 或 TCollection 等 (Delphi Win32)

我正在开发各种组件,并且经常遇到需要具有“一对多”关系的属性,即组件到属性成员。组件通常是可视组件,但并非总是如此,有时需要在 IDE 中注册(即使用 Property Inspector),但并非总是如此。我发现自己不确定在设置这些属性时要采取哪条路线——使用数组属性、TList、TStringList、TCollection 或其他东西(可能是从其中一个继承的新类)。

何时/何地使用的“最佳实践”/指南是什么?

0 投票
3 回答
3435 浏览

delphi - 将表单和框架添加到包中

我正在开发一个 IDE 注册组件包,其中大部分是从 TFrame 基类派生的。包中还包含由这些组件调用的各种自定义对话框表单。我在德尔福 2007 年工作。

我注意到有时通常具有关联 DFM 文件的框架和表单单元并不总是在它们下方显示 DFM 文件“下方”(可通过​​小 [+] 树视图节点扩展器访问)。如果我添加一个现有的基于表单的 PAS 文件,例如,通过右键单击 BPL 项目(在项目管理器中)-> 添加,它不会在列表中显示 DFM 文件。

但是,如果我添加新的并在项目中创建一个新的窗体或框架单元,它会在项目管理器中显示为典型的嵌套两个文件项。如果我将现有表单从项目组中的另一个项目拖到有问题的这个 BPL 项目中,它也会显示这种方式。

似乎这应该是一致的,我更喜欢两个文件显示单位是框架还是表单。

这是否表明项目文件中有问题?我是否错误地将现有表单/框架添加到此包中?如果是这样,我应该如何添加现有的表单/框架单元,以便两个文件都显示在项目管理器列表中?

* 更新 *

来自艾伦的以下建议:

我尝试将 {$R *.dfm} 指令添加到表单的单元中,并且在将 DFM 文件添加到我的 BPL 包/项目时它不会强制显示它。将 {$R *.dfm} 添加到项目文件本身(我认为这不是您的意思,但我想我会尝试)也不起作用。这种技术是否只适用于 EXE 项目?

可能(可能)相关,尝试在某些地方使用该指令进行构建给了我这个:

[DCC 错误] E2161 警告:重复资源:类型 10 (RCDATA),ID TTESTTREEVIEW;文件 E:\Projects\MyApp\Components\TTestTreeViewFrame.dfm 资源保留;文件 E:\Projects\MyApp\Components\TTestTreeViewFrame.dfm 资源被丢弃。

“保留”和“丢弃”同一个文件??


后来:看起来这个“重复资源”问题可能与 有关。不确定,但至少在一种情况下,两者同时发生。