delphi – 在选择时设置ComboBox文本
发布时间:2020-12-15 04:30:23 所属栏目:大数据 来源:网络整理
导读:我正在开发一个应用程序,其中我有一个具有长文本值的组合框.由于文本值很大(以字符… 20或更多),要在组合框中显示,要求是在第一个字符后显示从下拉菜单中选择. 就像用红色标记的图像一样.如果用户选择第3项3 0.5到1.25轻微我应该只在组合框中显示3. 所以我试
我正在开发一个应用程序,其中我有一个具有长文本值的组合框.由于文本值很大(以字符… 20或更多),要在组合框中显示,要求是在第一个字符后显示从下拉菜单中选择.
就像用红色标记的图像一样.如果用户选择第3项3 0.5到1.25轻微我应该只在组合框中显示3. 所以我试过这个 sTheSelectedValue : string; procedure TForm1.ComboBox1Select(Sender: TObject); begin sTheSelectedValue:=TrimTextAndDisplay(ComboBox1.Text); //send theselected value ComboBox1.Text :=''; //clear the selection ComboBox1.Text:=sTheSelectedValue; //now assign as text to combo box Button1.Caption:=ComboBox1.Text; //just show the new value on the button. end; function TForm1.TrimTextAndDisplay(TheText : string): string; var sTheResult : string; begin sTheResult :=copy(TheText,1); //extract the first value.. Result :=sTheResult; end; 结果是 按钮似乎显示正确的值,但不显示组合框. 我想要的是在组合框中获得3,我似乎无法设置ComboBox1.Text:= 解决方法
我建议所有者绘制ComboBox来处理这个问题.将TComboBox.Style属性设置为csOwnerDrawFixed,然后在TComboBox.Items属性本身中仅存储数字’1′,’2′,’3’等,并使用TComboBox.OnDrawItem事件在删除时呈现完整字符串 – 向下列表是可见的,例如:
var sTheSelectedValue : string; const ItemStrings: array[0..7] of string = ( '0 to 0.1 Calm (rippled)','0.1 to 0.5 Smooth (wavelets)','0.5 to 1.25 Slight','1.25 to 2.5 Moderate','2.5 to 4 Rough','4 to 6 Very rough','6 to 9 High','9 to 14 Very high'); procedure TForm1.FormCreate(Sender: TObject); var I: Integer; begin ComboBox1.Items.BeginUpdate; try for I := Low(ItemStrings) to High(ItemStrings) do begin ComboBox1.Items.Add(IntToStr(I+1)); end; finally ComboBox1.Items.EndUpdate; end; end; procedure TForm1.ComboBox1Select(Sender: TObject); begin sTheSelectedValue := IntToStr(ComboBox1.ItemIndex+1); Button1.Caption := sTheSelectedValue; end; procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); var s: String; begin if odSelected in State then begin ComboBox1.Canvas.Brush.Color := clHighlight; ComboBox1.Canvas.Font.Color := clHighlightText; end else begin ComboBox1.Canvas.Brush.Color := ComboBox1.Color; ComboBox1.Canvas.Font.Color := ComboBox1.Font.Color; end; ComboBox1.Canvas.FillRect(Rect); s := IntToStr(Index+1); if not (odComboBoxEdit in State) then begin s := s + ' ' + ItemStrings[Index]; end; ComboBox1.Canvas.TextRect(Rect,Rect.Left+2,Rect.Top+2,s); if (State * [odFocused,odNoFocusRect]) = [odFocused] then begin ComboBox1.Canvas.DrawFocusRect(Rect); end; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |