【问题标题】:How to get the value of TcxComboBox in DELPHI 10.3.3DELPHI 10.3.3中如何获取TcxComboBox的值
【发布时间】:2020-11-06 16:38:35
【问题描述】:

我希望我能得到我想要的答案……我已经阅读了很多关于它的东西,但一无所获 所以这就是事情 我有一个从数据库中获取数据的 DBVERTICALGRID 视图...(不重要) 当我按下一个名为 Edit_btn 的按钮时,我将 EditorRow 转换为 ComboBox 使用:

for I := 1 to Data_Sheet_.temp_Query.RecordCount do
    begin
     TcxComboBoxProperties(Job_ColorName.Properties.EditProperties).Items.Add(Data_Sheet_.temp_Query.FieldByName('Color_Name').AsString);
     Data_Sheet_.temp_Query.Next;
    end;
   Data_Sheet_.temp_Query.First;

我得到了通过数据库中的数据填充组合框项目的正确结果...... 然后我想获取用户更改的值...(假设数据是“白色”,现在他想从 ComboBox 项目中将其更改为“蓝色”),我做了正确的设置EditorRow 使 OnChange 过程工作... ...当我想通过以下方式在 ComboBox 中显示所选值时,问题就出现了:

procedure TBindingJobEdit_.Job_ColorNameEditPropertiesChange(Sender: TObject);
begin
 ShowMessage('HAHAHAH|'+' '+TcxComboBoxProperties(Job_ColorName.Properties.EditProperties).Items.Text);
end;

我得到了数据库中的所有记录,但我只想要选定的一个,比如红色或只是蓝色

【问题讨论】:

  • 如果您阅读TcxComboBox documentation,您会看到Properties.Items 包含下拉列表中的所有项目,TcxComboBox.ItemIndex 包含所选项目的索引。
  • @RemyLebeau 是的,我读过它,我在问题中提到它返回数据库中的所有值,我想要选择一个......但至于ItemIndex 我不能找到任何东西,我的意思是在其属性中没有ItemIndex 的记录,如果是我的代码,你可以在任何地方找到Combobox.ItemIndex,但如果是我的代码,我找不到它
  • 那是因为您访问的是TcxComboBoxProperties,而不是TcxComboBox 本身。 ItemIndexTcxComboBox 的属性,而不是 TcxComboBoxProperties 的属性。您要查找的值在TcxComboBox.Properties.Items[TcxComboBox.ItemIndex]
  • @RemyLebeau 我厌倦了你说的话,但你不会相信的。 TcxComboBox.(Sometimes has Properties and sometimes it doesn't have) 然后当它有Properties 时,它没有Items 我的意思是完全没有运气它
  • 我不明白你在描述什么。组件属性不只是消失和重新出现。

标签: delphi devexpress vcl


【解决方案1】:

要访问 Grid 中 Cellule 的值,您必须执行以下操作: 假设您的视图是 jobview,因此在您的列中,您有一个属性内的事件 OnEditValueChange,(注意:您可以使用列的 OnChangeOnEditValueChanged强>的观点);所以,你的代码变成了:

    procedure TBindingJobEdit_.Job_ColorNameEditPropertiesChange(Sender: TObject);
    var MyText: string; MyValue: Variant;
    begin
     MyValue:= jobview.Controller.SelectedRows[0].Values[Job_ColorName.Index];
     MyText:= jobview.Controller.SelectedRows[0].DisplayTexts[Job_ColorName.Index];
    
     ShowMessage('HAHAHAH|'+' '+MyText);
     //Or you can use MyValue (As ItemIndex of the combobox), in this case MyValue is Integer value.
    end;

希望你能找到答案。

我这样修改我的代码

uses ...., cxDropDownEdit;

    TForm1 = class(TForm)
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
      procedure cxComboBox1PropertiesEditValueChanged(Sender: TObject);
    Private
      Job_ColorName: TcxComboBox;
    Public
    end;
    
    implementation
    {$R *.dfm}
    
    procedure TFTeste.Button1Click(Sender: TObject);
    begin
      Job_ColorName:= TcxComboBox.Create(Self);
      // Other code for Job_Colorname to assign Left, Top, Width, Populate Items, ....
      Job_ColorName.Properties.OnEditValueChanged:= cxComboBox1PropertiesEditValueChanged;
    end;
    
    procedure TFTeste.cxComboBox1PropertiesEditValueChanged(Sender: TObject);
    var MyText: string;
    begin      
      MyText:= TcxComboBox(Sender).Text;
      // or 
      MyText:= TcxComboBox(Sender).Properties.Items[TcxComboBox(Sender).ItemIndex];
    
      ShowMessage('HAHAHAH|'+' '+MyText);
    end;
    
    end.

【讨论】:

  • 这可能也有效,我必须检查,但 Combobox 是在运行时创建的,答案在上面我发现它没有下一个问题是如何在运行时将 onChange 过程分配给像 Combobox 这样的对象喜欢Delphi ComboBox1.OnChange := ???? 这个我不知道怎么做
【解决方案2】:

这是我在 DevExpress 专家和支持者的帮助下找到的答案 您可以在此链接中看到完整的描述,这是代码行

procedure TBindingJobEdit_.Job_ColorNameEditPropertiesChange(Sender: TObject);
begin
 ShowMessage('HAHAHAH|'+' '+TcxComboBox(Sender).EditValue);
end;

以及Support Center的链接

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 1970-01-01
    • 2021-10-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多