delphi – 在选择时设置ComboBox文本

前端之家收集整理的这篇文章主要介绍了delphi – 在选择时设置ComboBox文本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个应用程序,其中我有一个具有长文本值的组合框.由于文本值很大(以字符… 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;
原文链接:https://www.f2er.com/delphi/101285.html

猜你在找的Delphi相关文章