2

在表单上,​​我有两个分组框、两个复选框和一个按钮。在按钮代码中,我目前有以下两行:

if CheckBox1.Checked then GroupBox1.Show; 
if CheckBox2.Checked then GroupBox2.Show;

我想要的是;在我点击按钮后,

IF checkbox1 被选中然后 groupbox1 应该出现并且如果 checkbox2 被选中然后 groupbox2 应该出现。

但是,还有两个让我感到困惑的进一步要求:

  1. 在我按下提到的按钮之前,两个组框都不应该显示在表单上。
  2. 两个组框(如前所述,出现哪一个取决于单击按钮后选择了哪个复选框)应该出现在表单的完全相同的位置。但是我不能在确切的位置设置两个不同的元素(在我的情况下是组框)。

Version of delphi is 7.

4

3 回答 3

2

试试这个:

GroupBox1.Visible := CheckBox1.Checked;
GroupBox2.Visible := CheckBox2.Checked;
于 2012-07-27T10:01:41.297 回答
1

由于您的 2 GroupBox 在同一位置,我会使用单选按钮而不是复选框,因为 2 groupbox 不能同时显示...

这是一个例子:

// Click event for a radiogroup see DFM below
procedure TForm1.rg1Click(Sender: TObject);
begin
  gb1.Visible := False;
  gb2.Visible := False;
  if rg1.ItemIndex = 0 then
    gb1.Visible := True
  else
    gb2.Visible := True;
end;

表单是这样设计的(可以看我设置的不同属性):

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form6'
  ClientHeight = 337
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object gb1: TGroupBox
    Left = 40
    Top = 60
    Width = 185
    Height = 105
    Caption = 'gb1'
    TabOrder = 0
    Visible = False
  end
  object gb2: TGroupBox
    Left = 40
    Top = 60
    Width = 185
    Height = 105
    Caption = 'gb2'
    TabOrder = 1
    Visible = False
  end
  object rg1: TRadioGroup
    Left = 40
    Top = 8
    Width = 185
    Height = 33
    Caption = 'rg1'
    Columns = 2
    Items.Strings = (
      'GB1'
      'GB2')
    TabOrder = 2
    OnClick = rg1Click
  end
end
于 2012-07-27T10:06:15.647 回答
1

两个组框都不应该显示在表单上

在编译程序之前,在 Delphi Object Inspector 中将 .Visible 设置为 false

您是否阅读了有关 .Show 的帮助?它提到了该属性。看看 SEE ALSO 部分 http://docwiki.embarcadero.com/Libraries/XE2/en/Vcl.Controls.TControl.Show

坦率地说,更简洁的应该是 listbox.visible := checkbox.checked


应该出现在表单的完全相同的位置

好吧,你不能同时在同一个地方展示它们吗?

如果两个复选框都打开,你想如何同时显示它们?

我相信您应该删除复选框并放置单选按钮,而不是只能按下一个或另一个。

试试 TRAdioGroup

http://docwiki.embarcadero.com/Libraries/XE2/en/Vcl.ExtCtrls.TRAdioGroup.ItemIndex

 ~~~~~~~~~~~~~~~~~~~
 |  ( )   No lists |
 |  (*)   List 1   |
 |  ( )   List 2   |
 ~~~~~~~~~~~~~~~~~~~

RadioGrououp.OnClick := ... (* 过程 .... List1.Visible := RadioGroup.ItemIndex = 1; List2.Visible := RadioGroup.ItemIndex = 2; 结束。*)


两个组框应出现在完全相同的位置

1) 使用 TNotebook 并将它们放在不同的页面上。切换页面而不是切换可见性。这种方法将允许您进行更多控制,而不仅仅是那些。您可以轻松地将它们放在不同页面上的相同坐标处。

2) 在 form.OnShow: List2.Top := List1.Top 和 Left、Width 和 Height 相同

于 2012-07-27T10:18:13.943 回答