我在我的表单中有很多cxDBButtonEdit,我想,当用户按下ENTER键在第一个按钮中点击时。
我试图找到任何方法,程序,功能......什么都没有!
我试着这样做:
if (ActiveControl is TcxDBButtonEdit) then
begin
if ((ActiveControl as TcxDBButtonEdit).Properties.Buttons.Count > 0) and ((ActiveControl as TcxDBButtonEdit).Properties.Buttons.Items[0].Enabled) then
begin
(ActiveControl as TcxDBButtonEdit) <----- HERE
try
GetParentForm(Screen.ActiveForm).Perform(CM_DIALOGKEY, VK_TAB, 0);
Key := #0;
except
end;
end;
end;
谢谢,
答案 0 :(得分:1)
你的工作太辛苦了。 :-)
您的问题询问是否点击按钮,但您的代码表示发送了一个标签(VK_TAB)。我不确定你真正想做什么,所以我会尝试解决这两个问题。
我对TcxDBButtonEdit(或任何其他DevExpress控件)一无所知,但是这样的东西应该对你有用(对于tab键):
if (ActiveControl is TcxDBButtonEdit) then
begin
// We know it's a TcxDBButtonEdit, so we can directly cast it
if (TcxDBButtonEdit(ActiveControl).Properties.Buttons.Count > 0) and
(TcxDBButtonEdit(ActiveControl.Properties.Buttons.Items[0].Enabled) then
begin
Key := #0;
Self.SelectNext(ActiveControl, True, True); // See notes below
end;
end;
如果您想要实际点击编辑控件附带的按钮,DevExpress support has an article表示您可以执行此操作来调用按钮的点击处理程序(将调用替换为上面的SelectNext
):
if (ActiveControl is TcxDBButtonEdit) then
begin
// We know it's a TcxDBButtonEdit, so we can directly cast it
if (TcxDBButtonEdit(ActiveControl).Properties.Buttons.Count > 0) and
(TcxDBButtonEdit(ActiveControl.Properties.Buttons.Items[0].Enabled) then
begin
Key := #0;
TcxCustomEditAccess(ActiveControl).DoButtonClick(0);
end;
end;
(我显然无法编译上面的代码,因为我没有DevEx控件;调用DoButtonClick
的行来自他们的文章。如果编译器抱怨它,你可能需要添加跟随你的代码(在包含使用它的代码的方法的正上方可能是最好的地方):
type
TcxCustomEditAccess = class(TCxCustomEdit);
从名称的“访问”部分看,DoButtonClick
可能是TcxCustomEdit
的受保护方法。声明插入器类允许您访问受保护的方法。)
关于SelectNext的注释:
将输入焦点从当前子控件移动到Tab键顺序中的下一个。
调用SelectNext移动子控件焦点。 SelectNext选择Tab键顺序中位于CurControl之后或之前的第一个子节点,并且该子节点符合其他参数中指定的条件。
GoForward参数控制搜索的方向。如果GoForward为true,则FindNextControl按Tab键顺序搜索子控件。如果GoForward为false,则SelectNext向后搜索控件。搜索将收集的结尾包装回CurControl。
CheckTabStop参数控制SelectNext控件是否必须是制表位。如果CheckTabStop为true,则返回的控件必须将其TabStop属性设置为true,否则将继续搜索下一个控件。
如果子控件与搜索条件匹配,则该控件将获得焦点。如果没有找到这样的子控件,则焦点保持不变。