2

フォームには、2 つのグループボックス、2 つのチェックボックス、および 1 つのボタンがあります。ボタンのコードには、現在次の 2 行があります。

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

私がしたいのは; ボタンをクリックした後、

IF チェックボックス 1 がチェックされている場合は groupbox1 が表示され、IF チェックボックス 2 がチェックされている場合は groupbox2 が表示されます。

ただし、私を混乱させる2つの要件がさらにあります。

  1. 上記のボタンを押す前に、2つのグループボックスのどちらもフォームに表示されるべきではありません。
  2. 両方のグループボックス (どちらが表示されるかは、ボタンのクリック後に選択されたチェックボックスによって異なります) は、フォームのまったく同じ場所に表示される必要があります。しかし、正確な場所に 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つのグループボックスが同じ位置にあるため、2つのグループボックスを同時に表示できないため、チェックボックスの代わりにラジオボタンを使用します...

次に例を示します。

// 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

2 つのグループボックスのどちらもフォームに表示しないでください

プログラムをコンパイルする前に、Delphi Object Inspector で .Visible を false に設定します。

.Show のヘルプを読みましたか? そのプロパティについて言及しています。「関連項目」セクションを参照してください 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; end. *)


両方のグループボックスがまったく同じ場所に表示されるはずです

1) TNotebook を使用して、それらを別のページに配置します。表示を切り替える代わりにページを切り替えます。そのアプローチにより、それらだけでなく、さらに多くのコントロールを作成できます。また、異なるページの同じ座標に簡単に配置できます。

2) form.OnShow: List2.Top := List1.Top で、左、幅、高さについても同じ

于 2012-07-27T10:18:13.943 に答える