如何强制点击cxDBButtonEdit?

时间:2014-02-23 00:06:08

标签: delphi devexpress

我在我的表单中有很多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;

谢谢,

1 个答案:

答案 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的注释:

来自TWinControl.SelectNext文档

  

将输入焦点从当前子控件移动到Tab键顺序中的下一个。

     

调用SelectNext移动子控件焦点。 SelectNext选择Tab键顺序中位于CurControl之后或之前的第一个子节点,并且该子节点符合其他参数中指定的条件。

     

GoForward参数控制搜索的方向。如果GoForward为true,则FindNextControl按Tab键顺序搜索子控件。如果GoForward为false,则SelectNext向后搜索控件。搜索将收集的结尾包装回CurControl。

     

CheckTabStop参数控制SelectNext控件是否必须是制表位。如果CheckTabStop为true,则返回的控件必须将其TabStop属性设置为true,否则将继续搜索下一个控件。

     

如果子控件与搜索条件匹配,则该控件将获得焦点。如果没有找到这样的子控件,则焦点保持不变。