0

Visual Studio 2005 を使用して、VB.NET でスタンドアロン アプリケーションを作成しています。

Buttonの選択した値に基づいて、一連の を表示/非表示にしたいComboBox。選択ごとButtonに表示する のセットが異なるため、それらを適切なグリッドに配置したいと考えています。

TabControl値を使用して a を駆動するComboBoxことは、私が望むような動作ですが、混乱を招く可能性があるため、ユーザーに TabControl のように見せたくありません。

これを行う方法はありますか?

基本的には、ComboBox の Selection1 にボタン 1 ~ 4 を表示し、Selection2 にボタン 5 ~ 11 を表示し、Selection3 に (おそらく) ボタン 1、3、5、6、8 を表示するなど、適切に配置したいと考えています。 、GUI に ComboBox とボタンのみを表示します。

いつもありがとうございます!

4

3 に答える 3

2

フォームのパネルにすべてのボタンを配置できます。その後、コンボボックスの SelectedIndex イベントが発生すると、パネル上のボタンをループして、Tag プロパティに基づいてオンとオフを切り替えることができます。

この例では、各ボタンの Tag プロパティを、有効にするコンボボックスのインデックスと等しくなるように設定します。複数のコンボ選択で表示したい場合は、タグ プロパティでインデックス値をカンマで区切ってください。

コンボボックスのインデックスをキーオフする必要はありません。たとえば、選択したテキストを使用できます。その場合は、ボタンを表示するテキストをタグ プロパティに配置し、コードを ComboBox1.SelectedIndex.ToString から ComboBox1.SelectedText に変更します。

ボタンは設計時に配置された場所でオンとオフを切り替えますが、ここにコードを追加して動的に配置し、表示されるすべてのボタンがきちんと配置されるようにすることもできます。

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    For Each ctrl As Control In Me.Panel1.Controls
        If TypeOf ctrl Is Button Then
            If Array.IndexOf(Split(ctrl.Tag, ","), ComboBox1.SelectedIndex.ToString) > -1 Then
                ctrl.Visible = True
            Else
                ctrl.Visible = False
            End If
        End If
    Next
End Sub
于 2010-07-08T21:40:32.853 に答える
2

パネルコントロール (項目が隣り合ってグループ化されていない場合は複数) を使用し、それに応じて可視性を設定します。

(追加) パネルを積み重ねて、ボタンがすべて同じ場所にあるように見えるようにすることができます。しかし、それはメンテナンスの悪夢になるので、お勧めしません。

ハック警告- 以下はハックですが、動作します。

もう 1 つのオプションは、タブ コントロールを使用することですが、タブ ボタンを非表示にします。(ボタンの上にパネルを配置することでこれを行うことができますが、ユーザーがフォームのサイズを変更できるように注意する必要があります。) 次に、ドロップダウンの変更に基づいて TabIndex を設定します。

再度編集 - コメントごとに追加

ハックを使用する場合は、これを ComboBox の選択されたインデックス変更イベントに追加できます....

(私は開発用PCにいないため、コードが間違っている可能性がありますが、確認できませんが、アイデアは得られます)

TabControl1.SelectedIndex = ComboBox1.SelectedIndex
于 2010-04-14T21:50:02.240 に答える
1

FlowLayoutPanelを使用すると、ボタンを表示するのに役立つかもしれません。ジャグ配列を使用して、どのボタンがどのコンボ ボックス項目に属するかを定義できます。

于 2010-04-14T21:56:30.203 に答える